반응형
풀이
정렬되어 있는 수열에서 특정합을 구하는 문제류는 투포인터를 떠올리자
1. 숫자를 정렬한다.
2. 양쪽 끝에 숫자를 시작 left, right로 잡는다
3. 두 숫자의 합의 절댓값이 min보다 작으면 min을 갱신
4. 두 숫자의 합이 음수이면 left를 +1, 양수이면 right를 -1, 0이면 바로 종료
소스코드
import sys
N=int(input())
L=list(map(int,sys.stdin.readline().split()))
L.sort()
left = 0
right = N-1
min_sum = 9876543210
ans=[0,N-1]
while(left<right):
now_sum = L[left]+L[right]
# print(left,right,now_sum)
if abs(now_sum)<abs(min_sum):
min_sum = now_sum
ans[0]=left
ans[1]=right
if now_sum<0:
left+=1
elif now_sum>0:
right-=1
else:
break
print(L[ans[0]],L[ans[1]])
반응형