문제 링크
2470: 두 용액
구현 방식
- A를 오름차순으로 정렬
- left를 가장 왼쪽 idx, right를 가장 오른쪽 idx로 설정
- check은 현재 가장 0에 가까운 용액의 수치 (abs(l_value + right_value))
- left < right을 만족하는 동안 while을 돈다
a. sum_을 구하고 abs(sum_)이 check 보다 작다면, check 갱신, l_value, r_value 갱신
b. sum_이 음수라면 left += 1, 그렇지 않다면 right -= 1
코드
import sys
N = int(sys.stdin.readline()[:-1])
A = list(map(int, sys.stdin.readline()[:-1].split()))
A.sort()
left = 0; right = N-1
l_value, r_value = A[left], A[right]
check = abs(l_value + r_value)
while left < right:
sum_ = A[left] + A[right]
if abs(sum_) < check:
check = abs(sum_)
l_value, r_value = A[left], A[right]
if sum_ == 0: break
if sum_ < 0: left += 1
else: right -= 1
print(l_value, r_value)