728x90
문제
https://www.acmicpc.net/problem/2470
어떻게 풀 것인가?
이 문제를 보자마자 떠올랐던 것은 바로 "투포인터를 이용한 이분탐색 알고리즘" 이었다.
이분 탐색과 result 배열을 이용하여 계속해서 0과 가까운 것을 비교하면서 찾아간다.
이것은 아마 코드를 보는 것이 이해가 더 빠를 것이다.
풀면서 놓쳤던점
X
이 문제를 통해 얻어갈 것
이분탐색에 대한 응용
내 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[] arr;
public static void main(String[] args) throws IOException {
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);
int[] result = twoPoint();
System.out.println(result[0] + " " + result[1]);
}
private static int[] twoPoint() {
int[] result = new int[2];
int start = 0;
int end = N - 1;
result[0] = arr[start];
result[1] = arr[end];
while (start < end) {
int middle = arr[start] + arr[end];
if (middle == 0) {
result[0] = arr[start];
result[1] = arr[end];
break;
}
if (Math.abs(result[0] + result[1]) > Math.abs(middle)) {
result[0] = arr[start];
result[1] = arr[end];
}
if (middle > 0) {
end--;
} else {
start++;
}
}
Arrays.sort(result);
return result;
}
}
참고
X
728x90
'BaekJoon' 카테고리의 다른 글
[BaekJoon] 2589번 보물섬 (Java) 문제 풀이 [Gold 5] (0) | 2024.02.26 |
---|---|
[BaekJoon] 2565번 전깃줄 (Java) 문제 풀이 [Gold 5] (0) | 2024.01.07 |
[BaekJoon] 2225번 합분해 (Java) 문제 풀이 [Gold 5] (0) | 2023.12.31 |
[BaekJoon] 14503번 로봇 청소기 (Java) 문제 풀이 [Gold 5] (0) | 2023.12.29 |
[BaekJoon] 1759번 암호 만들기 (Java) 문제 풀이 [Gold 5] (0) | 2023.12.28 |