728x90
300x250
https://www.acmicpc.net/problem/2470
0에 가장 가까운 값을 내는 두수의 합 찾기.
정렬 후 idx = 0 부터 이분탐색을 통해 가장 0과 가까운 값을 찾아낸다.
<Java 코드>
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//System.setIn(new FileInputStream("Test.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int arr[] = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
int idx1 = -1;
int idx2 = -1;
int sum = 2000000001;
for (int i = 0; i < arr.length-1; i++) {
int start = i+1;
int end = N-1;
while(start<=end) {
int comp = arr[i] + arr[(start+end)/2];
if(Math.abs(comp) < sum) {
sum = Math.abs(comp);
idx1 = i;
idx2 = (start+end)/2;
}
if( comp < 0) {
start = ((start+end)/2) + 1;
}else {
end = ((start+end)/2) - 1;
}
}
}
System.out.println(arr[idx1]+" "+arr[idx2]);
}
}
728x90
'알고리즘 > 이분 탐색' 카테고리의 다른 글
백준 1654번: 랜선 자르기 [이분탐색][매개변수탐색]-Java (0) | 2023.09.01 |
---|---|
백준 2805번: 나무 자르기 [이분탐색][매개변수탐색][BinarySearch] -Java (0) | 2023.08.30 |
백준 10816번: 숫자 카드2 [이분 탐색][자료구조] - Java (0) | 2023.08.19 |
백준 2295번: 세 수의 합 [이분 탐색][자료구조] - Java (0) | 2023.08.19 |
백준 1920번: 수 찾기 [이분탐색][정렬] - Java (0) | 2023.08.16 |