728x90
반응형
Silver III
# 3273 두 수의 합
링크 : https://www.acmicpc.net/problem/3273
풀이
n = int(input())
arr = list(map(int, input().split()))
x = int(input())
arr.sort()
start, end = 0, n-1
cnt = 0
while start < end:
summary = arr[start] + arr[end]
if summary == x:
cnt += 1
start += 1
elif summary > x:
end -= 1
elif summary < x: # else로 처리 가능
start += 1
print(cnt)
후기
- 갓동빈님의 영상을 참고해서 투 포인터 사용법을 익히려고 시도했으나, 와닿지 않아서 여러번 실패를 거듭했다. 결국엔 다른 분의 풀이를 보고 나서 약간의 감을 잡을 수 있었다.
- 이진 탐색을 응용(?) 하는 방식으로 투 포인터를 이해할 수 있었다. start, end라는 두 개의 좌표를 가지고 원하는 값을 발견했을 때 cnt += 1 & start += 1, 원하는 값이 나오지 않았을 때 start or end를 이동시켜 while문이 계속 진행될 수 있도록 설계한다.
- 고집인지, 의지인지.. 힘들게 한 고비 넘어가는 것 같다.
'Algorithm Study > Python' 카테고리의 다른 글
[백준 파이썬] # 1966 프린터 큐 (0) | 2022.03.09 |
---|---|
[백준 파이썬] # 11279 최대 힙 (0) | 2022.03.06 |
[백준 파이썬] #10815 숫자 카드 (0) | 2022.03.04 |
[백준 파이썬] # 9095 1, 2, 3 더하기 (0) | 2022.03.02 |
[백준 파이썬] # 11286 절댓값 힙 (0) | 2022.03.01 |