문제풀이/백준(Boj) 문제풀이

[백준][투포인터] - 3273. 두 수의 합

얄루몬 2022. 8. 14. 20:34

n = int(input())
a = list(map(int,input().split()))
x = int(input())
cnt = 0
left, right = 0, n-1

a.sort()

while left < right:
    if a[left] + a[right] < x:
        left += 1
    elif a[left] + a[right] > x:
        right -= 1
    else:
        cnt += 1
        left += 1
        right -= 1
print(cnt)
  • 정렬해서 맨 앞 수와 맨 뒤의 수를 더해본 뒤 x보다 작을 때는 앞 수를 한 칸 뒤로 옮겨(더 큰수로 갈 수 있게)준다.
  • x보다 두 수를 더한 값이 더 클때는 right를 가르키고 있는 포인터를 앞쪽으로 옮겨(더 작은 수로 갈 수 있게)준다.
  • 두 수의 합이 해당 x와 같은 값이라면 cnt를 1 증가시켜준다.
  • 해당 문제는 두 수만 더하는 문제이기 때문에 정렬을 해서 풀어주어야 한다.