https://www.acmicpc.net/problem/2470
접근 :
- 들어온 배열을 오름차순으로 정렬한다.
- 왼쪽과 오른쪽 끝에 포인터를 두고, 합이 양수이면 오른쪽 포인터를 1내리고 음수 이면 왼쪽 포인터를 1 올린다.
- 선택 한 두 용액이 0 이되면 출력을 하고, 0 이 아니면 0에 가까운 수를 갱신한다.
코드구현 :
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
String[] temp = br.readLine().split(" ");
List<Integer> nums = new ArrayList<>(100_000);
for(int i = 0; i < n ; i++) nums.add(Integer.parseInt(temp[i]));
Collections.sort(nums);
int left = 0;
int right = n-1;
int[] res = new int[2];
int near_zero = 2_000_000_001;
int temp_min = 0;
int flag = 1;
while(left < right){
temp_min = nums.get(left) + nums.get(right);
if(temp_min == 0){
res[0] = nums.get(left);
res[1] = nums.get(right);
break;
}
flag = temp_min > 0 ? 1 : -1;
// 0 에 더 근접하면 정답 갱신
if(temp_min * flag < near_zero){
res[0] = nums.get(left);
res[1] = nums.get(right);
near_zero = temp_min * flag;
}
if(flag > 0){
right--;
continue;
}
left++;
}
System.out.println(sb.append(res[0]).append(' ').append(res[1]).toString());
br.close();
}
}
'JAVA > Coding Test' 카테고리의 다른 글
[JAVA] 백준 2110 공유기 설치_이분탐색 (0) | 2024.06.03 |
---|---|
[JAVA] 백준 2805 나무 자르기_이분탐색 (1) | 2024.06.03 |
[JAVA] 백준 7795 먹을 것인가 먹힐 것인가_정렬 (0) | 2024.06.03 |
[JAVA] 백준 과제는 끝나지 않아!_스택 (0) | 2024.05.31 |
[JAVA] 프로그래머스 연습 징검다리 (0) | 2024.05.30 |