-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathswea9229.java
More file actions
64 lines (45 loc) · 1.54 KB
/
Copy pathswea9229.java
File metadata and controls
64 lines (45 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package swea;
import java.io.*;
import java.util.*;
/*
* two-pointer 를 사용해서 구현
* */
public class swea9229 {
static int[] arr;
static int start_pointer;
static int end_pointer;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int test_case = Integer.parseInt(br.readLine());
for(int i = 1; i<=test_case; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
arr = new int[n];
st = new StringTokenizer(br.readLine());
for(int j = 0; j<n; j++) {
arr[j] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
int max = -1;
int ans = -1;
start_pointer = 0;
end_pointer = n-1;
while (start_pointer < end_pointer) { // 두개를 따로 구매해야 하므로 인덱스가 겹치게 되면 break
int sum_val = arr[start_pointer] + arr[end_pointer];
if(sum_val > max && sum_val <= m) {
max = sum_val;
ans = max;
}
if (sum_val >= m) { // 1) 만약 합친 값이 m보다 크거나 같다면 end pointer를 하나 내림
end_pointer--;
} else if(sum_val < m) { // 2) 만약 합친 값이 m보다 작다면 start pointer를 하나 올림
start_pointer++;
}
}
sb.append("#"+i+" "+ans+"\n");
}
System.out.println(sb.toString());
}
}