백준/Silver

[Silver III] 두 수의 합 - Java

JunKiBeom 2025. 8. 5. 22:04
반응형

문제 링크

성능 요약

메모리: 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