# 두 용액
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))
arr.sort()
result = []
min_result = sys.maxsize
sum = 0
left = 0
right = N-1
while left < right:
sum = arr[left] + arr[right]
if abs(sum) < min_result:
min_result = abs(sum)
result = [arr[left], arr[right]]
if sum < 0:
left += 1
elif sum > 0:
right -= 1
else:
break
sum = 0
print(*result)
투포인터
1. 정렬을 하고, 투 포인터를 양쪽 끝 인덱스 값에 놓는다.
- 두 용액의 값이 가장 작은 값으로 min_result를 업데이트, 결과 저장
- 음수이면, left += 1 (정렬을 했으니 값이 증가)
- 양수이면, right -= 1 (정렬을 했으니 값이 감소)
- 0이면, 최솟값이니 break
2. 결과 출력
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 10282번 - 해킹 (파이썬) (0) | 2022.03.11 |
---|---|
[백준] 2473번 - 세 용액 (파이썬) (0) | 2022.03.10 |
[백준] 2812번 - 크게 만들기 (파이썬) (0) | 2022.03.09 |
[백준] 17822번 - 원판 돌리기 (파이썬) (0) | 2022.03.08 |
[백준] 2239번 - 스도쿠 (파이썬) (0) | 2022.03.05 |