반응형
코드
import sys
n = int(input())
n_list = list(map(int,sys.stdin.readline().split()))
start = 0
end = n-1
min_n = 2000000001
n_list.sort()
while start < end:
num = n_list[end] + n_list[start]
if num == 0:
answer = [n_list[start],n_list[end]]
break
if abs(num) < min_n:
answer = [n_list[start],n_list[end]]
min_n = abs(num)
if num > 0:
end -= 1
else:
start += 1
print(*answer)
설명
투포인터를 사용하여 푸는 문제이다.
양 끝에서부터 시작해서 두 수를 더한 값의 절댓값이 0이면 바로 while문을 빠져나와 답을 출력하고, 현재 최솟값보다 작으면 answer에 두 수를 저장하고 min_n 값도 갱신했다.
두 수를 더한 값이 양수이면 end-1을 해줬고 음수이면 start+1을 해줬다.
반응형
'알고리즘 > 투포인터' 카테고리의 다른 글
[백준][JAVA] 2018번 수들의 합 5 (0) | 2023.03.10 |
---|---|
[백준][Python] 21921번 블로그 (0) | 2023.02.28 |
[백준][Python] 20922번 겹치는 건 싫어 (0) | 2022.06.30 |
댓글