Skip to content

Commit 391d363

Browse files
committed
BOJ_2473 : 세 용액
1 parent 29fa33d commit 391d363

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

week4/BOJ_2473(세 용액).java

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
int N = Integer.parseInt(br.readLine());
9+
StringTokenizer st = new StringTokenizer(br.readLine());
10+
long[] arr = new long[N];
11+
for (int i = 0; i < N; i++) {
12+
arr[i] = Long.parseLong(st.nextToken());
13+
}
14+
Arrays.sort(arr);
15+
long minAbs = Math.abs(arr[0] + arr[1] + arr[2]);
16+
long[] answer = new long[]{arr[0], arr[1], arr[2]};
17+
for (int i = 0; i < N - 2; i++) {
18+
long[] result = twoPointer(arr, i);
19+
long resultAbs = Math.abs(result[0] + result[1] + result[2]);
20+
if (minAbs > resultAbs) {
21+
minAbs = resultAbs;
22+
answer = result.clone();
23+
}
24+
}
25+
System.out.println(answer[0] + " " + answer[1] + " " + answer[2]);
26+
}
27+
28+
public static long[] twoPointer(long[] arr, int index) {
29+
int left = index + 1;
30+
int right = arr.length - 1;
31+
int leftIndex = left;
32+
int rightIndex = right;
33+
long minAbs = Math.abs(arr[left] + arr[right] + arr[index]);
34+
while (left < right) {
35+
long sum = arr[index] + arr[left] + arr[right];
36+
if (minAbs > Math.abs(sum)) {
37+
minAbs = Math.abs(sum);
38+
leftIndex = left;
39+
rightIndex = right;
40+
}
41+
if (sum > 0) {
42+
right--;
43+
} else {
44+
left++;
45+
}
46+
}
47+
return new long[]{arr[index], arr[leftIndex], arr[rightIndex]};
48+
}
49+
}

0 commit comments

Comments
 (0)