백준 2467 용액 / python

이유참치·2026년 4월 3일

백준

목록 보기
246/248

문제 : [2467](### 문제 : https://www.acmicpc.net/problem/2467)

풀이 point

우선 정렬과 투포인터를 생각할 수 있다. 두 값을 더해 0에 가까운 값을 만들어야 한다.
두 용액을 더해서 절댓값을 취한 값이 현재 가지고 있는 min값보다 작을 경우 갱신해준다.
이때 더한 값에 따라 왼쪽과 오른쪽 포인터의 값을 어떻게 이동할지가 달라진다.

  1. 0일 경우
    best값이기 때문에 더이상 볼 필요가 없으므로 break 한다.

  2. 0보다 클 경우
    값을 줄여야 하기 때문에 오른쪽 포인터를 한칸 줄인다.

  3. 0보다 작을 경우
    값을 늘려야 하기 때문에 왼쪽 포인터를 한칸 늘린다.

풀이 코드

N = int(input())

nums = list(map(int, input().split()))

l, r = 0, N-1

ans = float('inf')
a, b = 0, 0

while l < r:
  sums = nums[l]+nums[r]
  if abs(sums) < ans:
    ans = abs(sums)
    a, b = l, r
  
  if sums == 0: break
  elif sums > 0: r -= 1
  else: l += 1

print(nums[a], nums[b])
profile
임아리 - 대학생

0개의 댓글