본문 바로가기
문제 풀이/백준(BOJ)

[Python] 백준 3273번 : 두 수의 합

by 희조당 2022. 8. 8.
728x90

https://www.acmicpc.net/problem/3273

 

3273번: 두 수의 합

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는

www.acmicpc.net


💡 문제 풀이

두 포인터 문제이다.

 

정렬을 한 다음에 시작 값과 끝 값을 계산해서

같다면 정답의 개수를 늘리고, 계산값이 찾는 값 보다 크면 end를 줄이고, 반대라면 start를 늘리면 된다.

✔️ 느낀 점

두 포인터의 개념을 처음 공부하는 기회였다. 이번에 잘 정리해놔야겠다.

💻 코드

N = int(input())
arr = list(map(int, input().split()))
arr.sort()
x = int(input())

start, end = 0, N-1
cnt = 0

while start < end:
    tmp = arr[start] + arr[end]
    if tmp == x: cnt += 1
    if tmp < x:
        start += 1
        continue
    end -= 1
     
print(cnt)

댓글