๋ฌธ์ ๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/42891
๋ฌธ์ ์ค๋ช
* ํจ์จ์ฑ ํ ์คํธ์ ๋ถ๋ถ ์ ์๊ฐ ์๋ ๋ฌธ์ ์ ๋๋ค.
ํ์ ์์์ด ์์ฑํ ๋ฌด์ง๋ ์์ ์ ์ฌ๋ฅ์ ๋ฝ๋ด๊ณ ์ถ์ด ์ก๊ณ ๊ณ ๋ฏผ ๋์ ์นด์นด์ค TV ๋ผ์ด๋ธ๋ก ๋ฐฉ์ก์ ํ๊ธฐ๋ก ๋ง์๋จน์๋ค.
๊ทธ๋ฅ ๋จน๋ฐฉ์ ํ๋ฉด ๋ค๋ฅธ ๋ฐฉ์ก๊ณผ ์ฐจ๋ณ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฌด์ง๋ ์๋์ ๊ฐ์ด ๋ ํนํ ๋ฐฉ์์ ์๊ฐํด๋๋ค.
ํ์ ํ์ ๋จน์ด์ผ ํ N ๊ฐ์ ์์์ด ์๋ค.
๊ฐ ์์์๋ 1๋ถํฐ N ๊น์ง ๋ฒํธ๊ฐ ๋ถ์ด์์ผ๋ฉฐ, ๊ฐ ์์์ ์ญ์ทจํ๋๋ฐ ์ผ์ ์๊ฐ์ด ์์๋๋ค.
๋ฌด์ง๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์์์ ์ญ์ทจํ๋ค.
- ๋ฌด์ง๋ 1๋ฒ ์์๋ถํฐ ๋จน๊ธฐ ์์ํ๋ฉฐ, ํ์ ํ์ ๋ฒํธ๊ฐ ์ฆ๊ฐํ๋ ์์๋๋ก ์์์ ๋ฌด์ง ์์ผ๋ก ๊ฐ์ ธ๋ค ๋๋๋ค.
- ๋ง์ง๋ง ๋ฒํธ์ ์์์ ์ญ์ทจํ ํ์๋ ํ์ ํ์ ์ํด ๋ค์ 1๋ฒ ์์์ด ๋ฌด์ง ์์ผ๋ก ์จ๋ค.
- ๋ฌด์ง๋ ์์ ํ๋๋ฅผ 1์ด ๋์ ์ญ์ทจํ ํ ๋จ์ ์์์ ๊ทธ๋๋ก ๋๊ณ , ๋ค์ ์์์ ์ญ์ทจํ๋ค.
- ๋ค์ ์์์ด๋, ์์ง ๋จ์ ์์ ์ค ๋ค์์ผ๋ก ์ญ์ทจํด์ผ ํ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฒํธ์ ์์์ ๋งํ๋ค.
- ํ์ ํ์ด ๋ค์ ์์์ ๋ฌด์ง ์์ผ๋ก ๊ฐ์ ธ์ค๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
๋ฌด์ง๊ฐ ๋จน๋ฐฉ์ ์์ํ ์ง K ์ด ํ์ ๋คํธ์ํฌ ์ฅ์ ๋ก ์ธํด ๋ฐฉ์ก์ด ์ ์ ์ค๋จ๋์๋ค.
๋ฌด์ง๋ ๋คํธ์ํฌ ์ ์ํ ํ ๋ค์ ๋ฐฉ์ก์ ์ด์ด๊ฐ ๋, ๋ช ๋ฒ ์์๋ถํฐ ์ญ์ทจํด์ผ ํ๋์ง๋ฅผ ์๊ณ ์ ํ๋ค.
๊ฐ ์์์ ๋ชจ๋ ๋จน๋๋ฐ ํ์ํ ์๊ฐ์ด ๋ด๊ฒจ์๋ ๋ฐฐ์ด food_times, ๋คํธ์ํฌ ์ฅ์ ๊ฐ ๋ฐ์ํ ์๊ฐ K ์ด๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ๋ช ๋ฒ ์์๋ถํฐ ๋ค์ ์ญ์ทจํ๋ฉด ๋๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ๋ผ.
์ ํ์ฌํญ
- food_times ๋ ๊ฐ ์์์ ๋ชจ๋ ๋จน๋๋ฐ ํ์ํ ์๊ฐ์ด ์์์ ๋ฒํธ ์์๋๋ก ๋ค์ด์๋ ๋ฐฐ์ด์ด๋ค.
- k ๋ ๋ฐฉ์ก์ด ์ค๋จ๋ ์๊ฐ์ ๋ํ๋ธ๋ค.
- ๋ง์ฝ ๋ ์ญ์ทจํด์ผ ํ ์์์ด ์๋ค๋ฉด -1์ ๋ฐํํ๋ฉด ๋๋ค.
์ ํ์ฑ ํ ์คํธ ์ ํ ์ฌํญ
- food_times ์ ๊ธธ์ด๋ 1 ์ด์ 2,000 ์ดํ์ด๋ค.
- food_times ์ ์์๋ 1 ์ด์ 1,000 ์ดํ์ ์์ฐ์์ด๋ค.
- k๋ 1 ์ด์ 2,000,000 ์ดํ์ ์์ฐ์์ด๋ค.
ํจ์จ์ฑ ํ ์คํธ ์ ํ ์ฌํญ
- food_times ์ ๊ธธ์ด๋ 1 ์ด์ 200,000 ์ดํ์ด๋ค.
- food_times ์ ์์๋ 1 ์ด์ 100,000,000 ์ดํ์ ์์ฐ์์ด๋ค.
- k๋ 1 ์ด์ 2 x 10^13 ์ดํ์ ์์ฐ์์ด๋ค.
์ ์ถ๋ ฅ ์
food_times | k | result |
[3, 1, 2] | 5 | 1 |
๋ฌธ์ ํ์ด
์ฒ์์ (food_time, ์์ ๋ฒํธ)๋ฅผ ๋ฆฌ์คํธ์ ๋ฃ์ด์ ๋จน๋๋ฐ ํ์ํ ์๊ฐ์ด ์งง์ ์์๋๋ก ์ ๋ ฌํด์ผ๊ฒ ๋ค๋ ์์ด๋์ด๊น์ง ๋ ์ฌ๋ ธ๋ค. food_time์ด ์์ ์์๋๋ก ์์์ ์ฒ๋ฆฌํ๋ฉด์ ๋ง์ฝ ๊ทธ ์์์ ๋ค ๋จน๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ด K๋ณด๋ค ํฌ๋ค๋ฉด, ๊ทธ๋ ๋ช ๋ฒ์งธ ์์์ ๋ค์ ์ญ์ทจํด์ผ ๋๋์ง ๊ณ์ฐํ๋๋ก ํ๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ผ๋ก ์คํจํ๋ค.. ์์์ ๋จน๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ ๊ณ์ฐ์ ์๋ชปํด์ ๊ณ์ ์ค๋ต์ฒ๋ฆฌ๊ฐ ๋๋ค..ใ ใ ๋จ์ ์์์ ์์ ๊ณ์ฐํ ๋ ์๊ฐ์ผ๋ก ๊ณ์ฐํ์ง ๋ง๊ณ ํ์ ํ์ด ํ์ ํ๋ ํ์๋ก ๊ณ์ฐํ์ด์ผ ํ๋๋ฐ ๊ทธ ๋ถ๋ถ์์ ์ค์๋ฅผ ํ๋ค.
์์ด๋์ด: (food_time, ์์ ๋ฒํธ)๋ฅผ heap์ ๋ฃ๊ณ food_time์ด ์งง์ ์์๋ถํฐ ์ญ์ ํ์!
1. ๋ชจ๋ ์์์ ๋ํด (food_time, ์์ ๋ฒํธ)๋ฅผ heap์ ์ฝ์ ํ๋ค.
2. food_time์ด ์งง์ ์์๋ถํฐ ์์์ ๋จน๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ณ์ฐํ๋ค.
- ์์์ ๋จน๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ: (๋จ์ ์์ ์) * (๋จ์ ์์ ๊ฐ์)
- ๋จ์ ์์ ์: ํ์ฌ food_time - ์ด์ ์ ์ ๊ฑฐํ food_time
3. ํ์ฌ ์์์ ๋ค ๋จน์ ์ ์๋ ๊ฒฝ์ฐ ์์์ ์ ๊ฑฐํ๋ค.
- ๋จ์ ์๊ฐ(k)์์ ํ์ฌ ์์์ ๋จน๋ ์๊ฐ์ ๋บ๋ค.
- ์ด์ ์ ์ ๊ฑฐํ food_time๊ณผ ๋จ์ ์์ ๊ฐ์๋ฅผ ๊ฐฑ์ ํ๋ค.
4. ํ์ฌ ์์์ ๋ค ๋จน์ ์ ์๋ ๊ฒฝ์ฐ ๋จ์ ์์ ์ค์์ ๋ค์์ ๋จน์ด์ผ ํ ์์ ๋ฒํธ๋ฅผ ๊ตฌํ๋ค.
- heap์ ๋จ์์๋ ์์ ๋ฒํธ ์ค์ (k + 1)๋ฒ์งธ ๋ฒํธ๋ฅผ ์ฐพ๋๋ค.
- k๋ ๋จ์ ์๋ ์์ ๊ฐ์๋ณด๋ค ํด ์ ์์ผ๋ฏ๋ก (k % ๋จ์ ์์ ๊ฐ์)๋ก ๋ฒํธ๋ฅผ ์ฐพ๋๋ค.
์์ค์ฝ๋
# ๋ฌด์ง์ ๋จน๋ฐฉ ๋ผ์ด๋ธ
import heapq
def solution(food_times, k):
answer = -1
h = []
for i in range(len(food_times)):
heapq.heappush(h, (food_times[i], i + 1))
food_num = len(food_times) # ๋จ์ ์์ ๊ฐ์
previous = 0 # ์ด์ ์ ์ ๊ฑฐํ ์์์ food_time
while h:
# ๋จน๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ: (๋จ์ ์) * (๋จ์ ์์ ๊ฐ์)
t = (h[0][0] - previous) * food_num
# ์๊ฐ์ด ๋จ์ ๊ฒฝ์ฐ ํ์ฌ ์์ ๋นผ๊ธฐ
if k >= t:
k -= t
previous, _ = heapq.heappop(h)
food_num -= 1
# ์๊ฐ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ(์์์ ๋ค ๋ชป๋จน์ ๊ฒฝ์ฐ) ๋จ์ ์์ ์ค์ ๋จน์ด์ผ ํ ์์ ์ฐพ๊ธฐ
else:
idx = k % food_num
h.sort(key=lambda x: x[1])
answer = h[idx][1]
break
return answer
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค / Pythonํ์ด์ฌ] ์๋ฌผ์ ์ ์ด์ (0) | 2021.07.24 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค/Pythonํ์ด์ฌ] ๋ชจ๋ 0์ผ๋ก ๋ง๋ค๊ธฐ (0) | 2021.05.21 |
[ํ๋ก๊ทธ๋๋จธ์ค/Pythonํ์ด์ฌ] ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ (0) | 2021.05.17 |
[ํ๋ก๊ทธ๋๋จธ์ค / Pythonํ์ด์ฌ] ๋ถ๋ ์ฌ์ฉ์ (0) | 2021.05.17 |
[ํ๋ก๊ทธ๋๋จธ์ค / Pythonํ์ด์ฌ] ํํ (0) | 2021.05.15 |