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

 

2473번: 세 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상

www.acmicpc.net

 

정수들을 받고 그 중에서 3개를 뽑고 합했을 때, 0에 가장 가까운 3개의 정수를 찾는 문제입니다.

 

1. 정수들을 정렬한다.

 2. 기준점 i를 잡고, 왼쪽 포인터는 i+1, 오른쪽 포인터는 받은 정수들의 길이인 n에서 1을 빼준 n-1

반복을 하면서 값을 찾습니다.

 

import sys
input = sys.stdin.readline

n = int(input())
solution = sorted(list(map(int,input().split())))
MIN = sys.maxsize
idx = [0]*3
flag=False

for i in range(n-2):
    if i>0 and solution[i] == solution[i-1]:
        continue
    left, right = i+1, n-1

    while left< right:
        total = solution[i] + solution[left] + solution[right]

        if(abs(total)<abs(MIN)):
            idx = [solution[i], solution[left], solution[right]]
            MIN = total
        if total<0:
            left += 1
        elif total>0:
            right-=1
        else:
            flag = True
            break
    if flag: break

print(*idx)

+ Recent posts