728x90
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 |