본문 바로가기
프로그래밍/알고리즘 & 자료구조

백준 2473 : 세 용액 with 파이썬

by Play_With 2024. 2. 2.
반응형

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)
반응형

댓글