반응형
https://www.acmicpc.net/problem/2473
2473번: 세 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상
www.acmicpc.net
# 포인트
1. 세 포인트를 잡아야 하기 때문에 하나의 고정값을 잡고, 나머지 두 포인터를 이동하며 0에 가까운 값을 갱신한다.
세 포인트가 겹치지 않아야 하므로, 고정값 뒤에서 포인터 2개를 잡아주기 때문에 포인터는 i+1부터 시작한다
n = int(input())
lst = sorted(list(map(int, input().split())))
res = 2*(10**9)+1
a,b,c=0,0,0
for i in range(n-2): #고정값과 포인터를 잡고 while문을 돌며 0과 가까운지 확인
refer = lst[i]
l_p = i+1 #왼쪽 포인터
r_p = n-1 #오른쪽 포인터
while l_p < r_p:
cur_sum = refer + lst[l_p] + lst[r_p]
if abs(cur_sum) <= abs(res):
a,b,c = refer, lst[l_p], lst[r_p] #세 용액 업데이트
res = abs(cur_sum) #결과값 업데이트
if cur_sum < 0:
l_p += 1
elif cur_sum >= 0:
r_p -= 1
print(a,b,c)
반응형
'프로그래밍 > 알고리즘 & 자료구조' 카테고리의 다른 글
백준 4179 : 불! with 파이썬 (1) | 2024.02.04 |
---|---|
백준 1920 : 수 찾기 with 파이썬 (0) | 2024.02.03 |
백준 2470 : 두 용액 with 파이썬 (0) | 2024.02.01 |
백준 1940 : 주몽 with 파이썬 (1) | 2024.02.01 |
백준 1644 : 소수의 연속합 with 파이썬 (1) | 2024.01.31 |
댓글