2470: 두 용액

ewillwin·2023년 10월 9일
0

Problem Solving (BOJ)

목록 보기
214/230

문제 링크

2470: 두 용액


구현 방식

  • 투 포인터를 이용해서 풀었다
  1. A를 오름차순으로 정렬
  2. left를 가장 왼쪽 idx, right를 가장 오른쪽 idx로 설정
  3. check은 현재 가장 0에 가까운 용액의 수치 (abs(l_value + right_value))
  4. left < right을 만족하는 동안 while을 돈다
    a. sum_을 구하고 abs(sum_)이 check 보다 작다면, check 갱신, l_value, r_value 갱신
    b. sum_이 음수라면 left += 1, 그렇지 않다면 right -= 1

코드

import sys

N = int(sys.stdin.readline()[:-1])
A = list(map(int, sys.stdin.readline()[:-1].split()))
A.sort()

left = 0; right = N-1
l_value, r_value = A[left], A[right]
check = abs(l_value + r_value)

while left < right:
    sum_ = A[left] + A[right]

    if abs(sum_) < check:
        check = abs(sum_)
        l_value, r_value = A[left], A[right]
        if sum_ == 0: break
    
    if sum_ < 0: left += 1
    else: right -= 1
print(l_value, r_value)
profile
💼 Software Engineer @ LG Electronics | 🎓 SungKyunKwan Univ. CSE

0개의 댓글