본문 바로가기
PS/Baekjoon Online Judge

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

by kimyoungrok 2024. 3. 11.
728x90

문제

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


소스코드

보기

728x90