[3273번] 두 수의 합

HYEOB KIM·2022년 6월 8일
1

algorithm

목록 보기
30/44

백준 3273번 두 수의 합

문제 풀이

  • 투 포인터를 이용하여 문제를 해결할 수 있습니다.
  • 주어진 수열을 오름차순 정렬한 뒤 양끝에서부터 더하면서 기준값(x)과 비교합니다.
  • 기준값보다 두 수의 합이 클 경우 오른쪽 끝 포인터가 -1, 작을 경우 왼쪽 끝 포인터가 +1이 되면서 두 포인터가 만날 때까지 반복을 진행합니다.

코드 풀이

import sys
input = sys.stdin.readline

n = int(input())
num = list(map(int, input().split()))
x = int(input())   # 기준값

num.sort()

start, end = 0, n - 1   # 왼쪽 끝 포인터, 오른쪽 끝 포인터
cnt = 0
while start < end:
    hap = num[start] + num[end]
    if hap == x:   # 기준값과 같으면 문제 조건을 만족하는 쌍 +1, 오른쪽 끝 포인터 -1
        cnt += 1
        end -= 1
    elif hap > x:   # 기준값보다 합이 클 경우 오른쪽 끝 포인터 -1
        end -= 1
    else:
        start += 1   # 기준값보다 합이 작을 경우 왼쪽 끝 포인터 +1

print(cnt)
profile
Devops Engineer

0개의 댓글