문제
레벨: G5
알고리즘: 투 포인터
풀이시간: 40분
힌트 참조 유무: 무
https://www.acmicpc.net/problem/2470
1 번째 시도
[로직 설명]
1. 입력받은 숫자를 오름차순으로 정렬한다.
2. sum 값을 비교해가면 start, end 두 포인터를 조절해간다.
3. 종료조건은 start가 end 같거나 클 때이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String[] s = br.readLine().split(" ");
int[] numbers = new int[N];
for (int i = 0; i < N; i++) {
numbers[i] = Integer.parseInt(s[i]);
}
Arrays.sort(numbers);
int start = 0, end = N - 1;
int minGap = Integer.MAX_VALUE;
int resultStart = numbers[start], resultEnd = numbers[end];
while (start < end) {
int sum = numbers[start] + numbers[end];
int gap = Math.abs(sum);
if (gap < minGap) {
minGap = gap;
resultStart = numbers[start];
resultEnd = numbers[end];
}
if (sum > 0) {
end--;
} else if (sum < 0) {
start++;
} else {
break;
}
}
System.out.println(resultStart + " " + resultEnd);
}
}
'알고리즘 > 투포인터' 카테고리의 다른 글
[백준 7543] 합이 0인 네 정수 / 자바 / 투포인터 (0) | 2024.09.09 |
---|---|
[백준 1644] 소수의 연속합 (0) | 2024.06.16 |
[백준 11728] 배열 합치기 / 자바 /투 포인터 (1) | 2024.06.14 |