본문 바로가기

백준

[백준] 3273번 - 두 수의 합 (파이썬)

반응형

1. 문제

 

2. 코드

n = int(input())
l = list(map(int, input().split()))
x = int(input())
cnt = 0

l.sort()
left = 0
right = n-1

while True:
    if l[left] + l[right] == x:
        cnt += 1
        right -= 1
    elif l[left] + l[right] > x:
        right -= 1
    else:
        left += 1
    if left >= right:
        break
    
print(cnt)

 

3. 풀이

투포인터(left, right)를 사용하는 문제.

우선 받은 값을 정렬한다.

l[left] + l[right]가 원하는 값이면 cnt를 증가시키고, right를 이동한다.

원하는 값보다 적으면 합이 더 커져야 하기 때문에 left를 이동하고,

많으면 합이 더 적어져야 하기 때문에 right를 이동한다.

728x90
반응형