728x90
https://www.acmicpc.net/problem/2467
용액의 입력은 정렬되어 있다는 점을 활용해 투포인터로 풀 수 있습니다.
l 값은 증가할수록 합이 증가하고
r 값은 감소할수록 합이 감소합니다.
합이 0 보다 크면 합을 줄여야 하므로 r 값을 감소시키고
합이 0 보다 작으면 합을 늘여야 하므로 l 값을 증가시키면 됩니다.
import sys
input = sys.stdin.readline
def solution(fluids):
## 투포인터
l = 0
r = len(fluids)-1
# 최소 절댓값
min_abs_sum_nums = float('inf')
# 합이 0 이거나 두 포인터가 교차할 때 까지
while l < r:
# 합
sum_nums = fluids[l] + fluids[r]
# 최소 절댓값 갱신
if abs(sum_nums) < min_abs_sum_nums:
min_abs_sum_nums = min(min_abs_sum_nums, abs(sum_nums))
min_abs_nums = [fluids[l], fluids[r]]
# 합이 0 보다 크면 r 값 조정
if sum_nums > 0:
r -= 1
# 합이 0 보다 작으면 l 값 조정
else:
l += 1
print(*min_abs_nums)
# 입력
N = int(input().strip())
fluids = list(map(int, input().strip().split()))
solution(fluids)
728x90
'Coding Test > BaekJoon_Python' 카테고리의 다른 글
백준 1647 <도시 분할 계획> Python (1) | 2024.10.10 |
---|---|
백준 1197 <최소 스패닝 트리> Python (1) | 2024.10.10 |
백준 2787 <흔한 수열 문제> Python (0) | 2024.10.10 |
백준 2191 <들쥐의 탈출> Python (1) | 2024.10.09 |
백준 3295 <단방향 링크 네트워크> Python (2) | 2024.10.08 |