코딩테스트 파이썬/백준
용액 ( 2467번 )
세용용용용
2025. 5. 1. 17:23
🧪 백준 2467번: 용액
📌 문제 설명
KOI 부설 과학연구소에서는 산성 용액과 알칼리성 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들고자 한다.
각 용액은 하나의 정수로 특성값을 가지며, 같은 양의 두 용액을 섞으면 합이 특성값이 된다.
정렬된 용액 리스트가 주어졌을 때, 두 용액을 선택하여 0에 가장 가까운 값을 만드는 조합을 찾아라.
🧠 핵심 아이디어
- 정렬된 리스트이기 때문에 투 포인터(Two Pointers) 알고리즘을 적용 가능
- 왼쪽 포인터는 음수 영역(알칼리성), 오른쪽 포인터는 양수 영역(산성)에서 시작하여
두 값을 더하면서 0에 가까운 값을 탐색 - 현재 합이 0보다 크면 오른쪽 포인터를 왼쪽으로 이동, 작으면 왼쪽 포인터를 오른쪽으로 이동
✨ 나의 풀이
import sys
def _main(n_list):
answer = [0, 0]
result_sum = float('inf')
l_idx, r_idx = 0, len(n_list) - 1
while r_idx > l_idx:
now_sum = n_list[l_idx] + n_list[r_idx]
if result_sum > abs(now_sum):
result_sum = abs(now_sum)
answer = [n_list[l_idx], n_list[r_idx]]
if now_sum > 0:
r_idx -= 1
else:
l_idx += 1
return ' '.join(list(map(str, answer)))
n = int(sys.stdin.readline().rstrip())
n_list = list(map(int, sys.stdin.readline().rstrip().split()))
print(_main(n_list))
⏱ 시간 복잡도 분석
while r_idx > l_idx : 투 포인터로 배열을 한 칸씩 이동하며 최적의 용액 조합을 찾아냄 ( 선형 시간 복잡도 )
해당 알고리즘 시간 복잡도 : 선형 시간 복잡도 ( O(n) )