File tree Expand file tree Collapse file tree 1 file changed +57
-0
lines changed
Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Original file line number Diff line number Diff line change 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+
You can’t perform that action at this time.
0 commit comments