728x90
๋ฐ์ํ
๐ก solutions
๐ฌ ์์ฐจํ์์ผ๋ก๋ ํจ์จ์ฑ์ ๋ง์กฑํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ด์งํ์์ผ๋ก ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์๋ ์ต๋ ์ธ์์ ์ฐพ์์ผ ํ๋ค.
๐ฌ start๋ 1, end๋ max(stones) ๋๋ค๋์ ์ต๋๊ฐ์ผ๋ก, mid๋ (start+end)//2๋ก ์ค์
๐ฌ ๋๋ค๋์ ์์์๋ถํฐ ํ๋์ฉ ๊บผ๋ด์ mid๊ฐ์ ๋นผ๊ณ ๊ฑด๋ ์ ์๋์ง ์๋์ง ํ์ธ
-> ๊ฑด๋ ์ ์๋ ๊ฒฝ์ฐ cnt += 1 / ๊ฑด๋ ์ ์๋ ๊ฒฝ์ฐ cnt = 0์ผ๋ก ์ด๊ธฐํ
๐ฌ cnt๊ฐ์ด k๊ฐ ์ด์์ด๋ฉด ๋๋ค๋์ mid๋ช ๋งํผ ๊ฑด๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋ฌธ break -> end๋ฅผ mid-1 ๋ก ๊ฐฑ์
๐ฌ ๋ฐ๋ณต๋ฌธ์ด ์จ์ ํ ์ข ๋ฃ๋ ๊ฒฝ์ฐ, ์ฆ mid๋ช ์ด ๋ชจ๋ ๋๋ค๋์ ๊ฑด๋ ์ ์๋ ๊ฒฝ์ฐ -> start๋ฅผ mid +1 ๋ก ๊ฐฑ์
๐จ๐ป code
def solution(stones, k):
start = 1
end = max(stones)
mid = (start + end) // 2
while start <= end:
cnt = 0
mid = (start + end) // 2
for stone in stones:
if (stone - mid) <= 0:
cnt += 1
if cnt >= k:
end = mid - 1
break
else:
cnt = 0
else:
start = mid + 1
return start
๐ problem
๋ฐ์ํ