반응형
성능 요약
메모리: 111412 KB, 시간: 848 ms
분류
정렬, 두 포인터
제출 일자
2024년 11월 22일 02:12:02
문제 설명
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 (ai, aj)쌍의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 수열의 크기 n이 주어진다. 다음 줄에는 수열에 포함되는 수가 주어진다. 셋째 줄에는 x가 주어진다. (1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000)
출력
문제의 조건을 만족하는 쌍의 개수를 출력한다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<Integer> list = new ArrayList<>();
int cnt = 0;
for (int i = 0; i < n; i++) {
list.add(sc.nextInt());
}
int x = sc.nextInt();
// 수열 정렬
Collections.sort(list);
// 투 포인터 기법
int left = 0;
int right = n - 1;
while (left < right) {
int sum = list.get(left) + list.get(right);
if (sum == x) {
cnt++; // 합이 x와 같으면 카운트
left++;
right--;
} else if (sum < x) {
left++; // 합이 x보다 작으면 왼쪽 포인터를 오른쪽으로
} else {
right--; // 합이 x보다 크면 오른쪽 포인터를 왼쪽으로
}
}
System.out.println(cnt);
}
}반응형
'백준 > Silver' 카테고리의 다른 글
| [Silver IV] 설탕 배달 - Java (0) | 2025.08.05 |
|---|---|
| [Silver V] 셀프 넘버 - Java (2) | 2025.08.04 |
| [Silver V] 나이순 정렬 - Java (1) | 2025.08.04 |
| [Silver V] 수 정렬하기 2 - Java (0) | 2025.08.04 |
| [Silver V] 좌표 정렬하기 - Java (0) | 2025.06.20 |