https://www.acmicpc.net/problem/2473
투 포인터를 활용하여 풀이하였습니다. 용액들을 정렬해주고 가장 수가 작은 용액을 고정해두고 투포인터로 0에 가까운 조합을 찾아주면 됩니다. 만약 현재 3용액의 합이 0보다 작으면 left를 증가, 0보다 크며 right를 감소시키면서 점점 0에 가까워지게 만들면 됩니다.
import sys
INT_MAX = sys.maxsize
sys.stdin = open("input.txt", "r")
input = sys.stdin.readline
n = int(input())
liquid = list(map(int, input().split()))
liquid.sort()
ans = None
sumOfliquids = sys.maxsize
for i in range(n - 2):
left, right = i + 1, n - 1
base = liquid[i]
flag = False
while left < right:
cur = base + liquid[left] + liquid[right]
if abs(cur) < sumOfliquids:
sumOfliquids = abs(cur)
ans = [liquid[i], liquid[left], liquid[right]]
if cur < 0:
left += 1
elif cur > 0:
right -= 1
else:
flag = True
break
if flag:
break
print(*ans)
'문제 해결 > BOJ' 카테고리의 다른 글
[백준] 달이 차오른다, 가자. (0) | 2023.04.01 |
---|---|
[백준] 공주님의 정원 (0) | 2023.03.31 |
[백준] 사회망 서비스(SNS) (0) | 2023.03.29 |
[백준] 색종이 - 3 (0) | 2023.03.28 |
[백준] 마피아 (0) | 2023.03.27 |