File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments