Algorithm/νλ‘κ·Έλλ¨Έμ€
[νλ‘κ·Έλλ¨Έμ€/Pythonνμ΄μ¬] μ§κ²λ€λ¦¬ 건λκΈ°
meeeeejin
2021. 5. 17. 14:52
λ¬Έμ λ§ν¬: https://programmers.co.kr/learn/courses/30/lessons/64062
λ¬Έμ μ€λͺ
건λ μ μλ μ¬λμ μλ₯Ό μ΄μ§ νμμ ν΅ν΄ ꡬν©λλ€. mλͺ μ μ¬λμ λν΄μ μκ°ν΄λ³΄λ©΄, ν λ²μ 건λμΌ νλ λλ€λμ κ°μκ° kκ°λ³΄λ€ ν¬λ€λ©΄ mλͺ μ μ¬λμ 건λ μ μμ΅λλ€. λ°λΌμ mλ³΄λ€ μμ κ°μΌλ‘ λ€μ μ΄μ§ νμμ μ§νν©λλ€. λ§μ½ ν λ²μ 건λμΌ νλ λλ€λμ κ°μκ° kκ° μ΄νλΌλ©΄ mλͺ μ μ¬λμ΄ λ€λ¦¬λ₯Ό 건λ μ μμΌλ―λ‘ mλ³΄λ€ ν° κ°μΌλ‘ λ€μ μ΄μ§ νμμ μ§νν©λλ€.
- μ΄μ§ νμμ start, endλ₯Ό μ΄κΈ°νν©λλ€.
- ν λ²μ 건λμΌ νλ λλ€λμ κ°μ μ€ μ΅λκ°μ ꡬν©λλ€.
- λλ€λμ μ ν μ«μκ° κ±΄λμΌ νλ μ¬λ μ(m) λ³΄λ€ μλ€λ©΄ λ§μ§λ§ μ¬λμ ν΄λΉ λλ€λμ λ°μ§ λͺ»ν©λλ€. - mλͺ
μ μ¬λμ΄ κ±΄λ μ μλ κ²½μ° end = m - 1λ‘ μ€μ ν©λλ€.
- ν λ²μ kκ° λ³΄λ€ λ λ§μ λλ€λμ 건λμΌνλ κ²½μ°μ λλ€. - mλͺ
μ μ¬λμ΄ κ±΄λ μ μλ κ²½μ° start = m + 1λ‘ μ€μ ν©λλ€.
- answer = max(answer, m)μ ν΅ν΄ κ°λ₯ν mλͺ μ€μμ μ΅λκ°μ ꡬν©λλ€. - start <= endλμ 2~4λ²λ₯Ό λ°λ³΅ν©λλ€.
μμ€μ½λ
def solution(stones, k):
answer = 0
start, end = min(stones), max(stones)
# μ΄μ§ νμ
while start <= end:
m = (start + end) // 2
# ν λ²μ 건λμΌ νλ λλ€λμ κ°μ μ€ μ΅λκ°
n, max_jump = 1, 0
for s in stones:
if s - m >= 0:
max_jump = max(n, max_jump)
n = 1
else: # λλ€λμ λ°μ§ λͺ»νλ κ²½μ°
n += 1
max_jump = max(n, max_jump)
# mλͺ
μ μ¬λμ΄ κ±΄λ μ μλ κ²½μ°
if max_jump > k:
end = m - 1
# mλͺ
μ μ¬λμ΄ κ±΄λ μ μλ κ²½μ°
else:
start = m + 1
answer = max(answer, m)
return answer
728x90