PS/Baekjoon Online Judge

[백준 03273] 두 수의 합[Python]

kimyoungrok 2024. 3. 11. 18:15

문제

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 둘다 변경해야 한다.


소스코드

보기