본문 바로가기

알고리즘/백준

[백준] 2470번 : 두 용액

728x90

2470번: 두 용액

 

2470번: 두 용액

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

www.acmicpc.net

🤔 문제분석

정렬 + 투포인터 문제로 pleft, pright를 두고 data[pleft] + data[pright]를 더한 값이 0보다 클경우 pright값을 줄이고 0보다 작을 경우 pleft값을 줄여가며 최대한 0에 가까운 수를 찾는다.

💻 코드

import sys
input = sys.stdin.readline

N = int(input())
data = list(map(int, input().split()))
data.sort()

pleft = 0
pright = N-1

ans = [data[pleft], data[pright]]
min_cost = abs(data[pleft] + data[pright])

while pleft < pright:
    cost = data[pleft] + data[pright]

    if min_cost > abs(cost):
        min_cost = abs(cost)
        ans = [data[pleft], data[pright]]
        if cost == 0:
            break
        
    if cost > 0:
        pright -= 1
    else:
        pleft += 1
    
print(ans[0], ans[1])

🎯 피드백 및 개선사항

min_cost = abs(cost)를 해줫어야 했는데 min_cost = cost로 초기화시켜서 어디서 잘못되었는지 한참 해맸습니다. 투포인터 개념을 익히기에는 좋은 문제 유형이라고 생각합니다.

728x90

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 2230번 : 수 고르기  (2) 2024.02.13
[백준] 2473번 : 세 용액  (0) 2024.02.12
[백준] 2212번 : 센서  (0) 2024.02.11
[백준] 1461번 : 도서관  (1) 2024.02.11
[백준] 13904번 : 과제  (1) 2024.02.10