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)
'알고리즘 공부' 카테고리의 다른 글
[백준/그리디] 2212번 센서 (0) | 2022.08.21 |
---|---|
[백준/DP] 2294번: 동전 2 (0) | 2022.08.14 |
[백준/비트마스크] 14939번 불 끄기 (0) | 2022.04.15 |
[백준/DP] 2266번 금고 테스트 (0) | 2022.04.13 |
[백준/소수] 19699번 소-난다! (0) | 2022.04.13 |