N = int(input())
arr = list(map(int,input().split()))
arr.sort()
start = 0
end = N-1
index_list = (arr[start],arr[end])
result = arr[end]+arr[start]
while start<end:
temp = arr[end]+arr[start]
if abs(result) > abs(temp):
result = temp
index_list = (arr[start],arr[end])
if result == 0:
break
if temp >= 0:
end -= 1
else:
start += 1
print(*index_list)
유명한 투 포인터 문제이다.
푸는 방법은 먼저 입력리스트를 정렬해준뒤에 0을 start로 N-1을 end로 둔다.
그리고 그 두 위치의 인덱스의 위치에 존재하는 값들의 합이 0보다 크면 end를 -1 하고 작으면 start를 +1 해준다. 그리고 그 합들이 0에 가까우면 교체해주는 방식으로 했다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 2660 회장 뽑기 (0) | 2021.02.22 |
---|---|
[BOJ/백준] 13023 ABCDE (0) | 2021.02.21 |
[BOJ/백준] 5719 거의 최단 경로 (0) | 2021.02.19 |
[BOJ/백준] 5582 공통 부분 문자열 (0) | 2021.02.18 |
[BOJ/백준] 3020 개똥벌레 (0) | 2021.02.18 |