https://www.acmicpc.net/problem/1463
1463๋ฒ: 1๋ก ๋ง๋ค๊ธฐ
์ฒซ์งธ ์ค์ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 106๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์ N์ด ์ฃผ์ด์ง๋ค.
www.acmicpc.net
๋ฌธ์
์ ์ X์ ์ฌ์ฉํ ์ ์๋ ์ฐ์ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ธ ๊ฐ์ง ์ด๋ค.
- X๊ฐ 3์ผ๋ก ๋๋์ด ๋จ์ด์ง๋ฉด, 3์ผ๋ก ๋๋๋ค.
- X๊ฐ 2๋ก ๋๋์ด ๋จ์ด์ง๋ฉด, 2๋ก ๋๋๋ค.
- 1์ ๋บ๋ค.
์ ์ N์ด ์ฃผ์ด์ก์ ๋, ์์ ๊ฐ์ ์ฐ์ฐ ์ธ ๊ฐ๋ฅผ ์ ์ ํ ์ฌ์ฉํด์ 1์ ๋ง๋ค๋ ค๊ณ ํ๋ค. ์ฐ์ฐ์ ์ฌ์ฉํ๋ ํ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 10^6๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์ N์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฐ์ฐ์ ํ๋ ํ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.

๋ฌธ์ ํ์ด
- BFS๋ก ํ๊น..? ํ์ง๋ง ์ ๋ ฅ์ ์ต๋ ๋ฒ์๊ฐ 10^6์ธ ๊ฒ์ ๋ณด๊ณ DP๋ก ํ์ด์ผ๊ฒ ๋ค ์๊ฐํ๋ค.
- DP๋ก ํธ๋ ๊ฒ์ด ํจ์ฌ ๊ฐ๋จํ๊ฒ ํ๋ฆฐ๋ค!
- dp[num]์ num์ 1๋ก ๋ง๋๋ ๋ฐ์ ํ์ํ ์ต์ ์ฐ์ฐ ํ์๋ฅผ ์๋ฏธํ๋ค.
- dp[1]์ ์๋ฌด๋ฐ ์ฐ์ฐ์ ํด์ฃผ์ง ์์๋ ์ด๋ฏธ 1์ด๋ฏ๋ก 0์ ์ ์ฅํ๊ณ , dp[2]๋ถํฐ dp[n]๊น์ง ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
- 3๊ณผ 2 ๋ชจ๋ ๋๋ ๋จ์ด์ง ์ ์๋ 6, 12, 18,.. ๊ณผ ๊ฐ์ ์๋ค์ 1,2,3๋ฒ ์ฐ์ฐ์ ๋ชจ๋ ์ํํ ์ ์๋ค.
- 3์ผ๋ก ๋๋ ์์ dp ๊ฐ / 2๋ก ๋๋ ์์ dp ๊ฐ / 1์ ๋นผ์ค ์์ dp ๊ฐ ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ์ ํํ๊ณ +1์ ํด์ ํด๋น ์ฐ์ฐ์ ์ํํ ํ์ 1์ ๋ํด์ dp ๊ฐ์ ๊ฐฑ์ ํด์ค๋ค.
- ๋ค์์ผ๋ก 3์ผ๋ก๋ง ๋๋ ๋จ์ด์ง๋ ๊ฒฝ์ฐ์ 1๋ฒ ์ฐ์ฐ๊ณผ 3๋ฒ ์ฐ์ฐ์ ์ํํ ์ ์๋ค.
- 3์ผ๋ก ๋๋ ์์ dp ๊ฐ / 1์ ๋นผ์ค ์์ dp ๊ฐ ์ค ์์ ๊ฐ์ ์ ํํ๊ณ ํด๋น ์ฐ์ฐ์ ์ํํ ํ์ 1์ ๋ํด์ dp ๊ฐ์ ๊ฐฑ์ ํ๋ค.
- 2๋ก๋ง ๋๋ ๋จ์ด์ง๋ ๊ฒฝ์ฐ๋ ์์ ๋์ผํ ๋ฐฉ์์ผ๋ก 2๋ก ๋๋ ์์ dp ๊ฐ / 1์ ๋นผ์ค ์์ dp ๊ฐ ์ค ์์ ๊ฐ์ ์ ํํด์ dp ๊ฐ์ ๊ฐฑ์ ํ๋ค.
- 3๊ณผ 2 ๋ชจ๋ ๋๋ ๋จ์ด์ง์ง ์๋ ๊ฒฝ์ฐ์ 3๋ฒ ์ฐ์ฐ๋ง ์ํ๊ฐ๋ฅํ๋ฏ๋ก 1์ ๋นผ์ค ์์ dp ๊ฐ์ 1์ ๋ํด์ dp๊ฐ์ ๊ฐฑ์ ํด์ค๋ค.
- ์ด๋ฌํ ๊ณผ์ ์ ๋ชจ๋ ๊ฑฐ์ณ์ dp[n] ๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋!
import sys
n=int(sys.stdin.readline())
dp=[0]*(n+1)
dp[1]=0
for i in range(2,n+1):
# 3๊ณผ 2๋ก ๋ชจ๋ ๋๋์ด ๋จ์ด์ง ๊ฒฝ์ฐ
if i % 3 == 0 and i % 2 == 0:
dp[i]=min(dp[i//3], dp[i//2], dp[i-1])+1
elif i%3==0:
dp[i]=min(dp[i//3], dp[i-1])+1
elif i%2==0:
dp[i]=min(dp[i//2], dp[i-1])+1
else:
dp[i]=dp[i-1]+1
print(dp[n])
'์๊ณ ๋ฆฌ์ฆ > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 9095 ๐ฅ] 1,2,3 ๋ํ๊ธฐ (1) | 2023.11.02 |
---|---|
[๋ฐฑ์ค 2579 ๐ฅ] ๊ณ๋จ ์ค๋ฅด๊ธฐ (0) | 2023.11.02 |
[๋ฐฑ์ค 15486 ๐ฅ] ํด์ฌ 2 (0) | 2023.09.24 |
[๋ฐฑ์ค 1520 ๐ฅ] ๋ด๋ฆฌ๋ง ๊ธธ (0) | 2023.08.30 |
[๋ฐฑ์ค 1563 ๐ฅ] ๊ฐ๊ทผ์ (0) | 2023.08.24 |