알고리즘/search

[백준]2470 두용액 투포인터

씩씩한 IT블로그 2022. 3. 7. 13:05
반응형

풀이

정렬되어 있는 수열에서 특정합을 구하는 문제류는 투포인터를 떠올리자

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]])


반응형