백준 BAEKJOON 3273번 두 수의 합 [PYTHON/파이썬]

문제 출처 (SILVER Ⅲ)

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

 

 

 

 

 

 

 

풀이

투 포인터를 활용하여 문제를 풀었다.

먼저 수열이 저장되어 있는 리스트를 오름차순으로 정렬 후

가장 앞쪽인 인덱스와 가장 뒤쪽인 인덱스의 수를 더하여 자연수 x가 되는지 확인했다.

x보다 작다면 앞쪽 인덱스를 +1 해주고, 크다면 뒤쪽 인덱스를 -1 해줬다.

x와 같다면 result 값에 +1 해준 뒤 왼쪽 인덱스도 +1 해줬다.

while문을 통해 앞쪽 인덱스가 뒤쪽 인덱스와 같아질때까지 반복한 뒤 결과를 출력했다.

 

 

 

 

 

코드

n = int(input())
numbers = sorted(list(map(int, input().split())))
x = int(input())
s, e = 0, n - 1  # start, end
result = 0

while s < e:
    if numbers[s] + numbers[e] < x:
        s += 1
    elif numbers[s] + numbers[e] > x:
        e -= 1
    else:  # x 값과 같을 때
        result += 1
        s += 1

print(result)