
배열을 꼭 오름차순으로 정렬 한 후 실시한다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Arrays;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int m = Integer.parseInt(st.nextToken());
int arr[] = new int[n];
int start = 0;
int end = n-1;
int cnt = 0;
st = new StringTokenizer(br.readLine());
for(int i=0;i<n;i++) // 배열 초기화
arr[i] = Integer.parseInt(st.nextToken());
Arrays.sort(arr); // 오름차순 정렬 필수
while(true){ // 두포인터 알고리즘
int sum = arr[start] + arr[end];
if(start>=end) break; // 반복문 끝나는 조건
if(sum >m){
end--;
}
else if(sum <m){
start++;
}
else{
cnt++;
start++;
}
}
sb.append(cnt);
System.out.println(sb);
br.close();
}
}