๋ฐ์ํ
๋ฌธ์ ๋งํฌ
https://programmers.co.kr/learn/courses/30/lessons/43236
๋์ ํ์ด
์ด์ ์ ํ์๋ ์ ๊ตญ์ฌ์ฌ ์ ๋น์ทํ ๋ฌธ์ ๋ค. ์ด๋ถํ์์ ๊ฐ๋ ์ ํ์คํํ๊ณ , ์ด ๋ฌธ์ ์ ์ ํ์ ํ์คํ๊ฒ ํ๊ณ ๋์ด๊ฐ ์ ์๋๋ก ํด์ผ๊ฒ ๋ค ใ ใ
def solution(distance, rocks, n):
answer = 0
left = 0
right = distance
rocks.sort()
# left, right, mid๋ ๊ฑฐ๋ฆฌ
while left <= right:
mid = (left + right) // 2
remove_rock = 0
prev_rock = 0
min_a = 1000000001
for rock in rocks:
# ๋ง์ฝ ํ์ฌ ๋๊ณผ, prev๋์ ๊ฑฐ๋ฆฌ๊ฐ mid๋ณด๋ค ์์ผ๋ฉด, ์์์ ์ mid๋ก ์ฎ๊ฒจ์ค์ผํ๋๊น ์ญ์ ํ๊ฒ๋๊ฒ์ง?
if rock - prev_rock < mid:
remove_rock += 1
# ๊ทธ๊ฒ ์๋๋ผ๋ฉด, rock-prev_rock ๊ฐ์ด min์ด ๋๋ ๊ฐ์ answer์ ์ ์ฅํ๊ณ prev๋ฅผ rock์์น๋ก ์ฎ๊น (๋ค์ rock ๊ฒํ )
else:
min_a = min(min_a, rock-prev_rock)
prev_rock = rock
# ์ญ์ ํ๋์ด n๋ณด๋ค ๋ง์ผ๋ฉด ๊ฑฐ๋ฆฌ๋ฅผ ์ค์ฌ์ค์ผํ๋ ๊ฒ์ด๋ฏ๋ก right๋ฅผ mid-11 ๊ฐ์ผ๋ก ๋ณํํ๊ณ ๋ค์ ใฑ
if remove_rock > n:
right = mid-1
else:
answer = min_a
left = mid+1
return answer
๋ฐ์ํ
'Algorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] (Swift) Kakao ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ (0) | 2022.04.29 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] (Swift) Kakao ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์ (0) | 2022.04.28 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฌ๋ฐ๋ฅธ ๊ดํธ (level.2) (0) | 2021.10.13 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ด๋ถํ์ - ์ ๊ตญ์ฌ์ฌ (level.3) (0) | 2021.10.07 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ ํ์ - ์นดํซ (level.2) (0) | 2021.09.23 |