크기를 비교하는문제(두 숫자의 합..)는 값을 정렬하면 문제를 더 쉽게 풀 수 있다!
시간제한은 2초이고, N의 최대범위가 15,000이므로 O(NlogN)시간복잡도 알고리즘을 사용해도 괜찮다.
일반적으로 정렬 알고리즘의 시간 복잡도는 O(NlogN)이다.
즉, 정렬을 사용해도 괜찮다!
입력받은 N개의 값을 정렬한 후, 양쪽 끝 위치를 투 포인터로 지정해 시작하자.
N입력받기
M입력받기
A[N] 선언
for(N만큼 반복) {
A원소 입력받기
}
A정렬
answer = 0
start = 0
end = N-1
while(start < end){
if(A[start] + A[end] == M) {
answer++
start++
end--
}
else if(A[start] + A[end] > M) end --
else start++
}
answer출력
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int M = Integer.parseInt(br.readLine());
int[] A = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i =0; i<N; i++) {
A[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(A);
int answer = 0;
int start = 0;
int end = N-1;
while(start<end) {
if(A[start] + A[end] == M) {
answer++;
start++;
end--;
}
else if(A[start] + A[end] > M) end--;
else start++;
}
System.out.println(answer);
}
}