본문 바로가기

Language/Python

[Python][백준 2470][투 포인터] 두 용액 - 컴도리돌이

728x90

풀이 과정

해당 문제는 단순한 투 포인터 문제이다.

두 값의 합이 0과 가까운 쌍을 찾으면 끝이다.

 

1. 주어진 x 배열을 정렬시킨다.

 

2. 문제에서 수들의 합이 매우 크기 때문에

minV를 매우 큰 값으로 설정하였다.

 

3. 투 포인터를 사용하기 때문에  0번째 인덱스와 n-1 인덱스부터 시작한다.

 

4. 오른쪽 인덱스 s와 왼쪽 인덱스 e의 합을 m으로 지정한다.

 

5. 절댓값 m이 minV보다 작을 경우

minV를 m으로 업데이트해준다.

ans를 현재 x [s], x [e]로 업데이트해준다.

 

6. minV이 0이면 반복문을 종료하고 현재 ans을 출력한다.

 

7. m 값이 0보다 작을 경우 오른쪽 인덱스를 증가시키고

반대일 경우 왼쪽 인덱스를 감소시킨다.


풀이 코드

n,*x= map(int,open(0).read().split()); x.sort()
minV,s,e,ans = 2e+10,0,n-1,None
while s < e :
  m = x[s] + x[e]
  if abs(m) < minV :
    minV,ans = abs(m),(x[s],x[e])
  if minV == 0 : break
  elif m < 0 : s += 1
  else : e -= 1
print(*ans)