코딩테스트/백준
[Java] 백준 2473번 - 세 용액
곰돌이볼
2023. 5. 26. 21:45
- 문제
- 링크 : https://www.acmicpc.net/problem/2473
- 세 용액의 조합 중 가장 0에 가까운 용액의 특성값(오름차순)
- 입력
- 첫번째 줄
- N : 용액의 수 (3 ≤ N ≤ 5,000)
- 두번째 줄
- N개의 용액의 특성값들 (-1,000,000,000 ≤ 특성값 ≤ 1,000,000,000)
- 첫번째 줄
- 출력
- 세 용액의 조합 중 가장 0에 가까운 용액의 특성값(오름차순)
- 로직 1)
- 투포인터
package backjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class No2473 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
long[] water = Arrays.stream(br.readLine().split(" "))
.mapToLong(s -> Long.parseLong(s))
.sorted()
.toArray();
Long[] ans = { water[0], water[1], water[2] };
Long sum = Math.abs(water[0] + water[1] + water[2]);
for(int i=0; i<N-2; i++) {
Long fixed = water[i];
int left = i+1;
int right = N-1;
while(left<right) {
Long tmp_sum = fixed + water[left] + water[right];
if(Math.abs(tmp_sum) < sum) {
ans[0] = fixed;
ans[1] = water[left];
ans[2] = water[right];
sum = Math.abs(tmp_sum);
}
if(0 < tmp_sum) right--;
else if(tmp_sum < 0) left++;
else {
System.out.println(ans[0] + " " + ans[1] + " " + ans[2]);
return;
}
}
}
System.out.println(ans[0] + " " + ans[1] + " " + ans[2]);
}
}
- 결과
- 성공