-
[Binary Search] BOJ 2470 λ μ©μ‘Algorithms in Python/baekjoon 2021. 1. 27. 08:36
π λ°±μ€ 2470 λ μ©μ‘
β λ¬Έμ μ ν΅μ¬, νμ΄ κ³Όμ
• μ°μ± μ©μ‘μ νΉμ±κ°μ 1λΆν° 1,000,000,000κΉμ§μ μμ μ μλ‘ λνλ΄κ³ , μμΉΌλ¦¬μ± μ©μ‘μ νΉμ±κ°μ -1λΆν° -1,000,000,000κΉμ§μ μμ μ μλ‘ λνλΈλ€.
=> λ²μλ₯Ό μκ°νλ©΄ μμ νμμΌλ‘ ν μ μλ€.
• μ°μ± μ©μ‘(μμ μ μ κ°), μμΉΌλ¦¬μ± μ©μ‘(μμ μ μ κ°) μ€ λ μ©μ‘μ νΌν©νλ€.
=> κ°μ μ’ λ₯λ νΌν©ν μ μλ€.
• λ μ©μ‘μ νΌν©ν νΉμ±κ°μ΄ 0μ κ°μ₯ κ°κΉμ΄ κ°μ κ°μ§ λμ λ μ©μ‘μ μ°ΎμμΌ νλ€.
=> ν μ©μ‘μ κΈ°μ€μΌλ‘ μ΄ μ©μ‘μ μ μΈν λλ¨Έμ§ μ©μ‘κ³Όμ νΉμ±κ°μ ν©μ΄ 0κ³Ό κ°μ₯ κ°κΉμ΄ κ²μ μ°Ύλλ€. (μ΄μ§νμ μ΄μ©)
- μ λ ¬λ μ©μ‘ μ λ ¬ arrμμ forλ₯Ό μ΄μ©νμ¬ iλ²μ§Έ μ©μ‘μ κΈ°μ€μΌλ‘ μ€μ νλ€.
- νΌν© νΉμ±κ°μ΄ 0κ³Ό κ°κΉμ΄ λλ¨Έμ§ μ©μ‘μ μ°ΎκΈ° μν΄ start = i + 1, end - n - 1λ‘ μ€μ νλ€.
- κ°μ₯ 0κ³Ό κ°κΉμ΄ νΌν© νΉμ±κ°μ μ°ΎκΈ° μν΄ min_sλ₯Ό μ€μ νμ¬ μ λκ°μ΄ μμ νΌν© νΉμ±κ°μ μ μ₯νκ³ , κ·Έ λμ μ©μ‘μ μ μ₯νλ€.
- νΌν© νΉμ±κ°μ΄ 0λ³΄λ€ μμΌλ©΄ λ ν° κ°μ λν΄μ£Όμ΄μΌ νκ³ , 0λ³΄λ€ ν¬λ©΄ λ μμ κ°μ λν΄μ£Όμ΄μΌ νλ€.
β μ 체 μ½λ
import sys input = sys.stdin.readline n = int(input()) arr = list(map(int, input().split())) arr.sort() # μ λ ¬ min_s= 2000000001 if n == 2: print(arr[0], arr[1]) exit(0) for i in range(n - 1): start = i + 1 end = n - 1 # [i+1, n-1] μ κ° + iλ²μ§Έ κ°μ ν©μ λΉκ΅ν΄λκ°λ€. while start <= end: mid = (start + end) // 2 s = arr[i] + arr[mid] # νΌν© νΉμ±κ°μ΄ 0μ κ°κΉμ΄ μ©μ‘μ μ μ₯νλ€. if abs(s) < min_s: idx1, idx2, min_s = i, mid, abs(s) # νΌν© νΉμ±κ°μ΄ 0λ³΄λ€ μλ€λ©΄ λ ν° κ°μ λν΄μ£Όμ΄μΌ νλ€. if s < 0: start = mid + 1 # νΌν© νΉμ±κ°μ΄ 0λ³΄λ€ ν¬λ€λ©΄ λ μμ κ°μ λν΄μ£Όμ΄μΌ νλ€. else: end = mid - 1 print(arr[idx1], arr[idx2]) # ν¬ν¬μΈν°x, μ΄λΆνμμΌλ‘ νμμ λ
'Algorithms in Python > baekjoon' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[DFS/BFS] BOJ 18405 κ²½μμ μ μΌ (0) 2021.02.01 [DFS/BFS] BOJ 16234 μΈκ΅¬ μ΄λ (0) 2021.02.01 [Binary Search] BOJ 2110 곡μ κΈ° μ€μΉ (0) 2021.01.24 [Backtracking] BOJ 2580 μ€λμΏ (0) 2021.01.19 [DP] μ°μνλ κ²μ μ νν μ μμ λ (BOJ 2579, 2156) (0) 2021.01.18