Coding Test/BaekJoon_Python

백준 14921 <용액 합성하기> Python

JunOnJuly 2025. 1. 6. 13:51
728x90

https://www.acmicpc.net/problem/14921


전형적인 투 포인터 문제입니다.

상태값이 양수이면 0 으로 가까워지기 위해 값을 줄여야 하므로 r 포인터를 좌측으로 움직이고

상태값이 음수이면 값을 늘려야 하므로 l 포인터를 우측으로 움직이며 값을 갱신하면 됩니다.


import sys

input = sys.stdin.readline


def solution(N, liquides):
    # 투포인터
    l = 0
    r = N-1
    # 절댓값을 취할 시 최솟값이 되는 값
    min_state_value = liquides[r] + liquides[l]
    # 순회
    while l<r:
        # 상태값 갱신
        state_value = liquides[r] + liquides[l]
        # 최소 상태값 갱신
        if abs(state_value) < abs(min_state_value):
            min_state_value = state_value

        # 상태값이 0 이상이면
        if state_value > 0:
            # r 움직이기
            r -= 1
        
        # 0 이하면
        elif state_value < 0:
            # l 움직이기
            l += 1
        
        # 0 이면 그냥 출력
        else:
            print(0)
            return
        
    print(min_state_value)


# 입력
N = int(input().strip())
liquides = list(map(int, input().strip().split()))

solution(N, liquides)
728x90