CS/알고리즘_문제풀이(자바)

두 용액

Jedy_Kim 2021. 9. 30. 21:39
728x90

https://www.acmicpc.net/problem/2470

 

2470번: 두 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00

www.acmicpc.net

// 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import java.util.*;
import java.io.*;
 
public class Main{
  
  static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
  static int N;
  static int[] arr;
   
  static int pick1  = 0;
  static int pick2  = 0;
  
  // value와 같거나 가장 근사한 값을 찾는다.
  static void binarySearch() {
    
    int left  = 0;
    int right = N-1;
    int max = 2000000000;
 
    while(left < right) {
      int sum = arr[left] + arr[right];
 
      // 두 용액 갱신
      if(Math.abs(sum) < max) {
          pick1 = arr[left];
          pick2 = arr[right];
          max = Math.abs(sum);
      }
 
      if(sum > 0)
          right--;
      else
          left++
    } 
  }
  
  public static void main(String[] args) throws Exception {
 
    // Please Enter Your Code Here
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    N = Integer.parseInt(br.readLine());
    arr = new int[N];
    StringTokenizer st = new StringTokenizer(br.readLine());
    for(int i=0; i<N; i++) {
      arr[i] = Integer.parseInt(st.nextToken());
    }
    
    Arrays.sort(arr); 
     
    binarySearch();
    
    bw.write(pick1 + " " + pick2);
    br.close();
    bw.flush();
    bw.close();
 
  }
}
cs

 

반응형

'CS > 알고리즘_문제풀이(자바)' 카테고리의 다른 글

카드 구매하기2  (0) 2021.10.01
카드 구매하기  (0) 2021.10.01
섬의 개수  (0) 2021.09.30
단지번호붙이기  (0) 2021.09.30
숫자 개수 세기  (0) 2021.09.29