2470번 두 용액

개발새발log·2023년 4월 10일
0

백준

목록 보기
24/36

문제

https://www.acmicpc.net/problem/2470

접근 방식

정렬의 특성을 활용해 좀 특이하게(?) 풀었다.

플러스/마이너스와 상관없이 정렬하면, 양 옆의 두 가지 합들 중 하난 무조건 0에 가까운 용액이 나온다는 점을 활용했다.

문제의 예시대로라면 아래와 같이 정렬하는 것이다 :

-1 -2 4 98 -99

이렇게 두가지 합 중 절댓값이 가장 작은 걸 찾아 diff 값을 갱신했다.

산성 + 산성, 알칼리 + 알칼리도 가능하다는 점을 고려해 diff 값을 최대값(1,000,000,000) * 2 보다 크게 설정하는 걸 잊지 말자.

코드

import sys

input = sys.stdin.readline

n = int(input())
data = list(map(int, input().split()))

data = sorted(data, key=lambda x: abs(x))

diff = int(1e20)
res = []
for i in range(1, len(data)):
    cur = data[i - 1] + data[i]
    if abs(cur) < diff:
        diff = abs(cur)
        res = [data[i - 1], data[i]]

res.sort()
print(*res, sep=' ')
profile
⚠️ 주인장의 머릿속을 닮아 두서 없음 주의 ⚠️

0개의 댓글