๋ฌธ์ ๋งํฌ: 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
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค / Pythonํ์ด์ฌ] ๋ฌด์ง์ ๋จน๋ฐฉ ๋ผ์ด๋ธ (0) | 2021.07.21 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค/Pythonํ์ด์ฌ] ๋ชจ๋ 0์ผ๋ก ๋ง๋ค๊ธฐ (0) | 2021.05.21 |
[ํ๋ก๊ทธ๋๋จธ์ค / Pythonํ์ด์ฌ] ๋ถ๋ ์ฌ์ฉ์ (0) | 2021.05.17 |
[ํ๋ก๊ทธ๋๋จธ์ค / Pythonํ์ด์ฌ] ํํ (0) | 2021.05.15 |
[ํ๋ก๊ทธ๋๋จธ์ค/Pythonํ์ด์ฌ] ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์ (0) | 2021.05.15 |