[ BOJ / Python ] 2467번 용액

황승환·2022년 7월 5일
0

Python

목록 보기
341/498


이번 문제는 이분탐색을 통해 해결하였다. l, r 포인터를 양쪽 끝에 두고 시작하였는데, l의 증가와 r의 감소 타이밍을 생각하는 과정에서 시간이 조금 오래 걸렸다. 그러다가 두 포인터가 가리키는 값의 합이 양수일 경우에는 r을 감소시켜 합을 낮추는 방향으로, 두 포인터가 가리키는 값의 합이 음수일 경우에는 l을 증가시켜 합을 높이는 방향으로 구현하였다. 그리고 도중에 두 합이 0인 경우가 있다면, 이보다 더 작은 절댓값을 구할 수 없으므로 바로 while문을 종료시켰다.

Code

import sys
n = int(input())
liquid = sorted(list(map(int, input().split())))
l, r = 0, n-1
answer = [0, 0]
std = sys.maxsize
while l < r:
    mix = liquid[l] + liquid[r]
    if abs(mix) <= std:
        std = abs(mix)
        answer = [liquid[l], liquid[r]]
    if mix > 0:
        r -= 1
    elif mix < 0:
        l += 1
    else:
        break
print(*answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글