반응형
3273번: 두 수의 합
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는
www.acmicpc.net
풀이
- 수열 중 ai + aj = x 를 만족하는 쌍의 개수를 찾는 문제다.
- 투 포인터로 풀 수 있는 가장 기본적인 문제다.
- 수열을 정렬한 후 앞과 뒤 부터 포인터를 출발시켜 , x보다 크다면 뒤쪽을 당겨 합을 줄이고 x보다 작다면 앞쪽을 밀어 합을 늘인다.
- 두 포인터가 만날 때 , while 문이 종료되도록 하면 모든 범위에 대해 투 포인터들이 합을 검사하고 이를 통해 정답을 찾을 수 있다.
import sys
n = int(sys.stdin.readline())
s = list(map(int , sys.stdin.readline().split(" ")))
x = int(sys.stdin.readline())
s.sort()
fp=0; ep=len(s)-1; ans = 0
while fp != ep:
if s[fp] + s[ep] == x:
ep -= 1
ans += 1
else:
if s[fp] + s[ep] < x:
fp += 1
else:
ep -= 1
print(ans)
반응형
'코딩 > 백준' 카테고리의 다른 글
알고리즘 - Python / 백준 - 2156번 : 포도주 시식 (0) | 2022.03.01 |
---|---|
알고리즘 - Python / 백준 - 2205번 : 저울 추 만들기 (0) | 2022.03.01 |
알고리즘 - Python / 백준 - 2533번 : 사회망 서비스(SNS) (0) | 2022.02.27 |
알고리즘 - Python / 백준 - 1092번 : 배 (0) | 2022.02.27 |
알고리즘 - Python / 백준 - 4149번 : 큰 수 소인수분해 (0) | 2022.02.27 |