https://www.acmicpc.net/problem/3649
import sys
input = sys.stdin.readline
while True:
try:
x = int(input()) * 10000000
n = int(input())
lego = [int(input()) for _ in range(n)]
lego.sort()
i, j = 0, n-1
flag = True
while i < j:
if lego[i] + lego[j] == x:
print('yes %d %d' %(lego[i], lego[j]))
flag = False
break
elif lego[i] + lego[j] < x:
i += 1
else:
j -= 1
if flag:
print('danger')
except:
break
투포인터를 이용했다.
리스트를 정렬한 이후, 각각 0번째와 -1번째부터 시작한다.
만약 arr[start] + arr[end]가 x와 같다면, 그보다 더 큰 abs값은 없으니 그대로 while문을 종료한다.
'알고리즘' 카테고리의 다른 글
파이썬) 시험 감독 -BOJ (0) | 2023.11.28 |
---|---|
파이썬) 일곱 난쟁이 - BOJ (0) | 2023.11.23 |
파이썬) 최대 힙 - BOJ (0) | 2023.11.20 |
파이썬) 회전초밥 - BOJ (0) | 2023.11.20 |
파이썬) 비슷한 단어 - BOJ (0) | 2023.11.19 |