๐ฉ๐ปโ๐ป๋ฌธ์ ์ค๋ช
[์ด์ฝํ Ch16-35] ๋ชป์๊ธด ์
๋ชป์๊ธด ์๋, ์์ธ์๋ถํด ํ์ ๊ฒฝ์ฐ ๋์ค๋ ์์ธ์๊ฐ 2, 3 ๊ทธ๋ฆฌ๊ณ 5๋ฟ์ธ ์๋ฅผ ์ด์ผ๊ธฐ ํ๋ฉฐ, ์ด๋ฅผ ์์ด๋ก ๋์ด๋์ผ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1, 2, 3, 4, 5, 6, 8, 9, 10, 12โฆ
ํธ์์ 1์ ๋ชป์๊ธด ์์ ํฌํจํ๋ค. ์ ์ n์ด ์ฃผ์ด์ก์ ๋, n๋ฒ์งธ ๋ชป์๊ธด ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
โ๏ธIdea Sketch
์๊ฐ๋ณต์ก๋
O(nlogn)
heap ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐฐ์ด ์์ ์ถ๊ฐ/์ญ์ ์๊ฐ๋ณต์ก๋๋ O(logn)์ด๋ค. ์ด๋ฅผ ๊ณ ๋ คํ๋ฉด ์ด ์๊ฐ๋ณต์ก๋๋ O(nlogn)์ด๋ค.
์๊ณ ๋ฆฌ์ฆ : ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
โ๏ธ๋ด ์์ค์ฝ๋
์ ์ฒด ์ฝ๋
import sys
import heapq
si = sys.stdin.readline
n = int(si())
queue = [2, 3, 5]
dp = [1]
while len(dp) < n:
x = heapq.heappop(queue)
if x == dp[-1]:
continue
dp.append(x)
heapq.heappush(queue, x*2)
heapq.heappush(queue, x*3)
heapq.heappush(queue, x*5)
print(dp[-1])