문제
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)
출력
문제의 조건을 만족하는 쌍의 개수를 출력한다.
풀이
서로 다른 양의 정수로 이루어진 수열에 대해 a(i) + a(j) = x 를 만족하는 쌍의 갯수를 찾는 문제다.
이중 반복문으로 조건을 만족하는 쌍의 갯수를 탐색하면 시간초과가 발생한다.임의의 두 수의 합과 x와의 관계에 따라 쌍의 요소를 적절히 선택해야 한다.우선 입력받은 수열을 정렬해주자.
이후 Two Pointer로 양쪽 요소의 합(temp)과 x를 비교해주며 탐색하면 된다.
temp == x인 경우는 요소의 중복을 방지하기 위해 left, right 둘다 변경해야 한다.
소스코드
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 02800] 괄호 제거 [Python] (0) | 2024.03.22 |
---|---|
[백준 02075] N번째 큰 수 [C/C++, Python] (0) | 2024.03.20 |
[백준 01182] 부분수열의 합 [Python] (0) | 2024.03.03 |
[백준 08980] 택배 [Python] (0) | 2024.02.29 |
[백준 01700] 멀티탭 스케줄링 [Python] (0) | 2024.02.28 |