Skip to content

Commit a8d2fb4

Browse files
committed
boj_2473_세용액
1 parent e2bc516 commit a8d2fb4

1 file changed

Lines changed: 56 additions & 0 deletions

File tree

Gold/boj_2473_세용액.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.Arrays;
5+
import java.util.StringTokenizer;
6+
7+
public class boj_2473_세용액 {
8+
9+
// input 값이 들어오는 배열 선언
10+
static long[] arr;
11+
// 선택하는 3개의 인덱스 값을 넣을 배열 선언
12+
static int best[] = new int[3];
13+
// 세 포인터
14+
static int start, mid, end;
15+
static long min = Long.MAX_VALUE;
16+
17+
public static void main(String[] args) throws IOException {
18+
19+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
20+
StringTokenizer st = new StringTokenizer(br.readLine());
21+
int n = Integer.parseInt(st.nextToken());
22+
arr = new long[n];
23+
24+
st = new StringTokenizer(br.readLine());
25+
for (int i = 0; i < n; i++) {
26+
arr[i] = Long.parseLong(st.nextToken());
27+
}
28+
29+
// 투포인터 문제에서는 정렬이 필수적이다
30+
Arrays.sort(arr);
31+
32+
// 투포인터의 응용으로 start는 for 문으로 하나씩 늘려가고, mid와 end를 각각 투포인터로 해결
33+
for (int i = 0; i < n - 2; i++) {
34+
start = i;
35+
mid = i + 1;
36+
end = n - 1;
37+
while (mid < end) {
38+
long sum = arr[start] + arr[mid] + arr[end];
39+
if (min > Math.abs(sum)) {
40+
min = Math.abs(sum);
41+
best[0] = start;
42+
best[1] = mid;
43+
best[2] = end;
44+
}
45+
if (sum == 0) {
46+
break;
47+
} else if (sum > 0) {
48+
end--;
49+
} else {
50+
mid++;
51+
}
52+
}
53+
}
54+
System.out.println(arr[best[0]] + " " + arr[best[1]] + " " + arr[best[2]]);
55+
}
56+
}

0 commit comments

Comments
 (0)