[Programmers/ level3] μ κ΅μ¬μ¬π
π©λ¬Έμ
nλͺ μ΄ μ κ΅μ¬μ¬λ₯Ό μν΄ μ€μ μμ κΈ°λ€λ¦¬κ³ μμ΅λλ€. κ° μ κ΅μ¬μ¬λμ μλ μ¬μ¬κ΄λ§λ€ μ¬μ¬νλλ° κ±Έλ¦¬λ μκ°μ λ€λ¦ λλ€.
μ²μμ λͺ¨λ μ¬μ¬λλ λΉμ΄μμ΅λλ€. ν μ¬μ¬λμμλ λμμ ν λͺ λ§ μ¬μ¬λ₯Ό ν μ μμ΅λλ€. κ°μ₯ μμ μ μλ μ¬λμ λΉμ΄ μλ μ¬μ¬λλ‘ κ°μ μ¬μ¬λ₯Ό λ°μ μ μμ΅λλ€. νμ§λ§ λ 빨리 λλλ μ¬μ¬λκ° μμΌλ©΄ κΈ°λ€λ Έλ€κ° κ·Έκ³³μΌλ‘ κ°μ μ¬μ¬λ₯Ό λ°μ μλ μμ΅λλ€.
λͺ¨λ μ¬λμ΄ μ¬μ¬λ₯Ό λ°λλ° κ±Έλ¦¬λ μκ°μ μ΅μλ‘ νκ³ μΆμ΅λλ€.
μ κ΅μ¬μ¬λ₯Ό κΈ°λ€λ¦¬λ μ¬λ μ n, κ° μ¬μ¬κ΄μ΄ ν λͺ μ μ¬μ¬νλλ° κ±Έλ¦¬λ μκ°μ΄ λ΄κΈ΄ λ°°μ΄ timesκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, λͺ¨λ μ¬λμ΄ μ¬μ¬λ₯Ό λ°λλ° κ±Έλ¦¬λ μκ°μ μ΅μκ°μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
π©μ νμ¬ν
- μ κ΅μ¬μ¬λ₯Ό κΈ°λ€λ¦¬λ μ¬λμ 1λͺ μ΄μ 1,000,000,000λͺ μ΄νμ λλ€.
- κ° μ¬μ¬κ΄μ΄ ν λͺ μ μ¬μ¬νλλ° κ±Έλ¦¬λ μκ°μ 1λΆ μ΄μ 1,000,000,000λΆ μ΄νμ λλ€.
- μ¬μ¬κ΄μ 1λͺ μ΄μ 100,000λͺ μ΄νμ λλ€.
π©μ μΆλ ₯ μ
n | times | return |
---|---|---|
6 | [7, 10] | 28 |
π©μ μΆλ ₯ μ μ€λͺ
- κ°μ₯ 첫 λ μ¬λμ λ°λ‘ μ¬μ¬λ₯Ό λ°μΌλ¬ κ°λλ€.
- 10λΆμ΄ λμμ λ, λ λ²μ§Έ μ¬μ¬λκ° λΉκ³ 4λ²μ§Έ μ¬λμ΄ μ¬μ¬λ₯Ό λ°μ΅λλ€.
- 14λΆμ΄ λμμ λ, 첫 λ²μ§Έ μ¬μ¬λκ° λΉκ³ 5λ²μ§Έ μ¬λμ΄ μ¬μ¬λ₯Ό λ°μ΅λλ€.
- 20λΆμ΄ λμμ λ, λ λ²μ§Έ μ¬μ¬λκ° λΉμ§λ§ 6λ²μ§Έ μ¬λμ΄ κ·Έκ³³μμ μ¬μ¬λ₯Ό λ°μ§ μκ³ 1λΆμ λ κΈ°λ€λ¦° νμ 첫 λ²μ§Έ μ¬μ¬λμμ μ¬μ¬λ₯Ό λ°μΌλ©΄ 28λΆμ λͺ¨λ μ¬λμ μ¬μ¬κ° λλ©λλ€.
πββοΈμ κ·Ό λ°©λ²
πμ΄λΆνμ?
- μ λ ¬λμ΄ μλ λ°°μ΄μμ λ²μλ₯Ό μ λ°μ© μ€μ¬κ°λ©΄ νμμ μ§ννλ λ°©μμ΄λ€.
- μκ° λ³΅μ‘λ: O(logN)
μ: [1, 2, 3, 4, 5, 6, 7, 8]μμ 7μ μ°Ύλ κ²½μ°
-
μ°μ μ΄λΆνμμμλ νμ λ²μμ μμκ³Ό λμ λνλ΄λ λ³μλ€κ³Ό λ²μμ μ€κ°κ°μ λνλ΄λ λ³μκ° νμνλ€.
-
첫 λ¨κ³μμ λ²μμ μμκ³Ό λμ κ°κ° 0κ³Ό 8μ΄κ³ , μ€κ°κ°μ 4κ° λλ€.
- μ°Ύκ³ μ νλ κ°μ΄ μ€κ°κ°λ³΄λ€ ν° κ°μ΄λ―λ‘ λ²μλ₯Ό μ€κ°κ° μ΄νλ‘ μ¬μ€μ ν΄μΌ νλ€.
- λ²μμ μμμ΄ μ€κ°κ° + 1μΈ 5κ° λλ€.
- μ°Ύκ³ μ νλ κ° < μ€κ°κ°: λ²μμ λμ μ€κ°κ°-1λ‘ λ³κ²½νμ¬ λ²μλ₯Ό μ¬μ€μ νλ€.
- μ΄μ κ°μ λ°©μμ λ²μμ μμκ³Ό λμ΄ μμ(μμ > λ)μ΄ λκΈ° μ κΉμ§ λ°λ³΅νλ€.
πλ¬Έμ ν΄κ²°
- ν΄λΉ λ¬Έμ μ ν΅μ¬μ πνΉμ μκ°λμ μ¬μ¬κ΄λ€μ΄ κ°κ° λͺ λͺ
μ μ¬λμ μ¬μ¬νλμ§πμ΄λ€.
- μ¦, ππνΉμ μκ°μ΄ μ£Όμ΄μ§λ€λ©΄ κ° μ¬μ¬κ΄λ€μ΄ μ¬μ¬ν μ μλ μ¬λμ μλ₯Ό ꡬν μ μλ€. μ΄λ₯Ό λ€ λνμ λ nλͺ μ΄ λλ μκ°μ ꡬνλ©΄ λλ κ²μ΄λ€!ππ
- μ¬κΈ°μ μ΄λΆνμμ μ μ©νλ€λ©΄ λ€μκ³Ό κ°λ€.
- νμν λμμ μ¬μ¬λ₯Ό λ°λλ° κ±Έλ¦¬λ μκ°μ΄ λλ€.
- νμ λ²μλ 0 ~ μ¬μ¬λ₯Ό λ°λλ° κ±Έλ¦¬λ μ΅λ μκ°
-
μ΄λΆνμμ μ§ννλ©΄μ νΉμ μκ°μ μ¬μ¬κ΄λ€μ΄ μ¬μ¬ν μ μλ μΈμ μκ° nμ΄ λλ μμ μ ꡬνλ€.
π μ¬κΈ°μ μ£Όμν μ μ΄ μλ€.π
- νΉμ μκ°μ κ° μ¬μ¬κ΄μ΄ μ¬μ¬ν μ μλ μ¬λμ μλ λ¨μν λͺ«μ ν΅ν΄μ νμ νκΈ° λλ¬Έμ nμ΄ λλ μκ°λ μ¬λΏ μ‘΄μ¬ν μ μλ€λ μ μ΄λ€.
- λ°λΌμ μ΄ μ€ μ΅μκ°μ κ΅¬ν΄ λ¬Έμ μ λ΅μ ꡬν΄μΌ νλ€.
π© κ·Έλ λ€λ©΄ μ½λλ₯Ό ν΅ν΄μ λ μμΈνκ² μ΄ν΄λ³΄μ!
def solution(n, times):
str = 0
end = n*times[-1]
mid = end//2
check = 0
answer = 0
while str <= end:
for i in times: #πν΄λΉ μκ°λμ μ¬μ¬κ΄λ€μ΄ μ¬μ¬ν μ μλ μ΄ μΈμ
tmp = mid//i
check += tmp
if check >= n:
end = mid-1
if answer == 0:
answer = mid
else:
answer = min(answer, mid) #πnμ΄ λλ μκ°λ μ€ μ΅μκ°μ ꡬνλ€.
else:
str = mid+1
mid = (str+end)//2
check = 0
return answer
π©βπ»λ°°μ΄ μ
μ΄λ² λ¬Έμ λ₯Ό ν΅ν΄μ μκ³ μ§λλ μ΄λΆνμμ λ€μ ν λ² λμ§κ³ λμ΄κ° μ μμλ€.
O(N)μ μκ°λ³΅μ‘λλ₯Ό κ°μ§λ μμ°¨νμ보λ€λ μ΄λΆνμ(O(logN))μ νμ©νλ κ²μ΄ ν¨ ν¨μ¨μ μ΄λΌλ κ²μ λ€μ ν λ² λλ μ μμκ³ , μ΄λΆ νμμ κ²½μ°, μ λ ¬λ λ°°μ΄μ κΈ°μ€μΌλ‘ μ§ννλ€λ μ λ μκ² λμλ€.
πββοΈνμ΄μ λΆμ‘±ν λΆλΆμ΄ μλ€λ©΄ λ§μν΄μ£ΌμΈμ! κ°μ¬ν©λλ€!
λκΈλ¨κΈ°κΈ°