반응형
백준 정렬 문제이고 두 포인터를 사용해야 합니다.
배열을 오름차순으로 정렬한 뒤에 배열의 처음 인덱스, 끝 인덱스를 가지고 움직이면서 원하는 합이 되면 cnt를 1 올리는 방식입니다.
1. 큰 틀은 두 원소의 합이 M보다 작을 때 클 때 같을 때로 나눕니다.
2. M보다 작다면 start를 1 올려서 작은 수부터 그 다음 원소로 올라가게 합니다.
3. M보다 크다면 end를 1 낮춰서 큰 수부터 그 아래 원소로 내려가게 합니다.
4. 그 밖의 경우라면 같다는 뜻이니 cnt를 1 올리고 start는 올리고 end는 낮춥니다.
import java.io.*;
import java.util.*;
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[] arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int cnt = 0;
int start = 0;
int end = arr.length-1;
Arrays.sort(arr);
while (start < end) {
if(arr[start] + arr[end] < M) {
start++;
} else if( arr[start] + arr[end] > M) {
end--;
} else {
start++;
cnt++;
end--;
}
}
System.out.println(cnt);
}
}
반응형
'백준 > 정렬' 카테고리의 다른 글
백준 10825 자바 (2) (0) | 2022.10.10 |
---|---|
백준 5635 자바 (0) | 2022.08.26 |
백준 1269 자바 (0) | 2022.08.21 |
백준 11728 자바 (0) | 2022.08.21 |
백준 11650 자바 (0) | 2022.08.21 |