두 용액
풀이
- 용액을 리스트를 통해 입력 받고 오름차순으로 정렬한다.
- l = 0, r = n-1 을 할당해주고 두 포인터 방식으로 while문을 통해 인덱스가 l인 값과 r인 값의 합을 비교, answer 리스트에 l,r 의 초기값 할당
- flag에 리스트의 가장 첫 값과 마지막값의 합의 절대값을 할당한다.
flag = abs(liquid[l] + liquid[r])
- while문의 종료조건은 l과 r의 값이 교차되는 순간 종료한다.
- liquid[l]과 liquid[r]의 합을 result에 저장하고 flag와 비교한 뒤 result의 절대값이 falg보다 작으면 flag 값 result로 교체
- 교체했을 시의 l,r 값을 리스트 answer에 저장
- 각 포인터 위치 변경 조건은 liquid[l]과 liquid[r]의 합이 양수면 r -= 1 그 외는 l +=1 로 포인터를 변경
- while 문 종료 후 answer 리스트 안의 값들을 인덱스로 갖는 liquid리스트 안의 값이 정답.
# 정답코드
n = int(input())
liquid = list(map(int,input().split()))
liquid.sort()
l, r = 0, n-1
flag = abs(liquid[l] + liquid[r])
answer = [l,r]
while l < r:
result = liquid[l] + liquid[r]
if abs(result) < flag:
flag = abs(result)
answer = [l,r]
if flag == 0:
break
if result > 0:
r = r - 1
else:
l += 1
print(liquid[answer[0]], liquid[answer[1]])