https://www.acmicpc.net/problem/2473
2473번: 세 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상
www.acmicpc.net
투 포인터를 활용하여 풀이하였습니다. 용액들을 정렬해주고 가장 수가 작은 용액을 고정해두고 투포인터로 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 |