반응형
- 알고리즘 분류 : 정렬, 이분 탐색(?)
- 사용 언어 : JAVA
- 문제 요점
- 0에 가깝다라는 뜻은 절댓값이 0에 가까우면 된다는 뜻.
- 절댓값으로 비교하면 문제 풀이가 쉬움
- 이분 탐색과 비슷한 것을 하는 이유는 시간 제한때문.
소스 설명은 주석을 참고해주세요.
package baekjoon_study;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// Link: https://www.acmicpc.net/problem/2470
public class Baekjoon_No_2470 {
// N : 2 이상 100,000
public static int N;
// 각 수치 : -1,000,000,000 이상 1,000,000,000 이하
public static long[] arr;
public static long temp = Long.MAX_VALUE;
public static long[] answer = new long[2];
// 두 용액만을 합쳐야 함.
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
arr = new long[N];
for(int i=0; i<N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
// 오름차순 정렬 후
Arrays.sort(arr);
// 양 사이드에서 확인 시작
int left = 0;
int right = N-1;
while(left<right) {
long sum = arr[left] + arr[right];
long absSum = Math.abs(sum);
// 절댓값이 temp보다 작다 = 0에 가깝다
if(temp > absSum) {
// 갱신
answer[0] = arr[left];
answer[1] = arr[right];
temp = absSum;
}
// 0보다 크면 우측 기준 감소시키기
if(sum > 0) {
right--;
}
// 아니라면 좌측 기준 증가시키기
else {
left++;
}
}
System.out.println(answer[0] + " " + answer[1]);
}
}
반응형
'Algorithm' 카테고리의 다른 글
[BAEKJOON] 10816번 : 숫자 카드 2 (JAVA) (0) | 2022.07.29 |
---|---|
[BAEKJOON] 1759번 : 암호 만들기 (JAVA) (0) | 2022.07.26 |
[BAEKJOON] 16234번 : 인구이동 (JAVA) (0) | 2022.07.15 |
[BAEKJOON] 12100번 : 2048(Easy) (JAVA) (0) | 2022.07.13 |
[BAEKJOON] 17609번 : 회문 (JAVA) (0) | 2022.06.23 |