[파이썬] 백준 2473번 세 용액
작성:
백준 #2473 세 용액
# 산성 용액, 알칼리 용액
# 용액의 특성을 나타내는 정수
# 산성 - 양 / 염기성 - 음
# 용액의 특성값 - 각 용액의 특성값의 합
# 특성값이 0에 가까운 용액을 만드려고 함.
# 출력: 특성값이 0에 가장 가까운 용액의 특성값을 오름차순으로 출력
# 체크할 조건
# 특성값을 '오름차순'으로 출력
# 산성 용액 or 염기성 용액으로만 이루어져있을 수 있음
# N <= 5000이라 백트래킹은 힘들듯.
# 하나의 값을 정하고 투포인터 알고리즘으로
# 세 용액의 특성값의 합이 최소인 점을 구해보자.
# 양 끝을 각각 start, end라고 하면
# start++ == 특성값 합이 커진다
# end-- == 특성값 합이 작아진다
# 합이 0보다 작다 -> start++
# 합이 0보다 크다 -> end--
def solution(N):
sol = sorted(list(map(int, input().split())))
val = float('inf')
result = []
for i in range(len(sol)-2):
s, e = i+1, len(sol)-1
while s != e:
sumval = sol[i] + sol[s] + sol[e]
absval = abs(sumval)
if absval < val:
val = absval
result = [sol[i], sol[s], sol[e]]
if sumval < 0: s += 1
elif sumval > 0: e -= 1
else:
print(sol[i], sol[s], sol[e])
return
print(*result)
if __name__ == '__main__':
solution(int(input()))
댓글남기기