Skip to content

Commit 3283575

Browse files
committed
[BOJ]#2470. 두 용액/골드5/힌트
https://www.acmicpc.net/problem/2470
1 parent afbdb51 commit 3283575

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

Hongjoo/백준/두용액.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
"""
2+
https://www.acmicpc.net/problem/2470
3+
4+
# 음 - 염 / 양 - 산성
5+
goal) 2개 혼합 -> 0에 가장 가까운 두 용액 찾기
6+
# 출력
7+
- 2개 오름차순 출력
8+
- 경우가 2개 이상이면 둘중에 1개 아무거나
9+
# flow
10+
1. 오름차순 정렬
11+
2. 2개가 +- 조합인 경우 => 양끝에 투 포인터..?
12+
=> [-99,-2,-1,4,98]
13+
start end
14+
#2-1. 둘 간 합이 기존 min보다 작으면 -> 업데이트
15+
# start와 end의 절대값 크기 차이를 기준으로 포인터가 이동함
16+
if abs(arr[start]) > abs(arr[end]) => start += 1 이동 , end 유지
17+
elif # end -= 1 이동
18+
else : #같으면
19+
break #끝
20+
21+
22+
# until : start = end 가 같은 idx를 가르키면 (start >= end)
23+
24+
25+
26+
2. 2개가 ++ 조합 => + 중 최소값 2개의 합
27+
3. 2개가 -- 조합 => -중 최대값 2개의 합
28+
=> 3개 비교 후 가장 0에 가까운 값 찾기
29+
"""
30+
31+
import sys
32+
N = int(sys.stdin.readline())
33+
liqs = sorted(list(map(int, sys.stdin.readline().split())))
34+
35+
# print(liqs)
36+
# 1. +- 의 조합
37+
start = 0 ; end = len(liqs)-1
38+
closed_z = [start,end,abs(liqs[start] + liqs[end])]
39+
while start < end :
40+
c = liqs[start] + liqs[end]
41+
if closed_z[-1] > abs(c) :
42+
closed_z = [start,end, abs(c)]
43+
if c == 0 :
44+
break
45+
# print(f"##")
46+
# print(f"# {c} : {closed_z} = {liqs[start]} / {liqs[end]}")
47+
48+
if abs(liqs[start]) > abs(liqs[end]) :
49+
start+= 1
50+
# elif abs(liqs[start]) < abs(liqs[end]) :
51+
else :
52+
end -=1
53+
54+
55+
print(liqs[closed_z[0]] , liqs[closed_z[1]])
56+
57+

0 commit comments

Comments
 (0)