Skip to content

Commit c89c080

Browse files
authored
Merge pull request #342 from AlgorithmWithGod/lkhyun
[20250611] BOJ / G3 / 세 용액 / 이강현
2 parents 81a659d + 2fc2d37 commit c89c080

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+
static StringTokenizer st;
9+
static int N;
10+
static int[] arr;
11+
static int[] selected = new int[3];
12+
static long min = Long.MAX_VALUE;
13+
public static void main(String[] args) throws IOException {
14+
15+
N = Integer.parseInt(br.readLine());
16+
arr = new int[N];
17+
st = new StringTokenizer(br.readLine());
18+
for (int i = 0; i < N; i++) {
19+
arr[i] = Integer.parseInt(st.nextToken());
20+
}
21+
Arrays.sort(arr);
22+
23+
boolean[] visited = new boolean[N];
24+
a:for (int i = 0; i < N; i++) { //모든 값들 중 하나 선택
25+
long base = arr[i];
26+
visited[i] = true;
27+
int left,right;
28+
29+
//base가 아닌 값들중 좌 우 맨 끝 값을 선택
30+
if(i==0){
31+
left = 1;
32+
right = N-1;
33+
}else if(i==N-1){
34+
left = 0;
35+
right = N-2;
36+
}else{
37+
left = 0;
38+
right = N-1;
39+
}
40+
41+
while(left<right){
42+
long sum = arr[left] + arr[right] + base;
43+
if(sum < 0){
44+
if(Math.abs(sum) < min){
45+
min = Math.abs(sum);
46+
selected[0] = arr[left];
47+
selected[1] = arr[right];
48+
selected[2] = (int)base;
49+
}
50+
if(visited[left+1]){
51+
left += 2;
52+
}else{
53+
left++;
54+
}
55+
}else if(sum > 0){
56+
if(Math.abs(sum) < min){
57+
min = Math.abs(sum);
58+
selected[0] = arr[left];
59+
selected[1] = arr[right];
60+
selected[2] = (int)base;
61+
}
62+
if(visited[right-1]){
63+
right -= 2;
64+
}else{
65+
right--;
66+
}
67+
}else{
68+
selected[0] = arr[left];
69+
selected[1] = arr[right];
70+
selected[2] = (int)base;
71+
break a;
72+
}
73+
}
74+
visited[i] = false;
75+
}
76+
Arrays.sort(selected);
77+
for (int i = 0; i < 3; i++) {
78+
bw.write(selected[i] + " ");
79+
}
80+
bw.close();
81+
}
82+
}
83+
```

0 commit comments

Comments
 (0)