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
'Coding Test > BaekJoon_Python' 카테고리의 다른 글
백준 32339 <대동여지도> Python (0) | 2025.01.08 |
---|---|
백준 2350 <대운하> Python (0) | 2025.01.07 |
백준 20168 <골목 대장 호석> Python (0) | 2025.01.05 |
백준 20010 <악덕 영주 혜유> Python (1) | 2025.01.03 |
백준 9344 <도로> Python (0) | 2025.01.02 |