๋ฐฑ์ค (BOJ) 1463๋ฒ
https://www.acmicpc.net/problem/1463
์ฌ์ฉ์ธ์ด : PYTHON
1.๋ฌธ์
2.ํ์ด
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (Bottom up) ๋ฐฉ์์ผ๋ก ํ์ด์ผ ํ๋ค.
2-1.์ํ์์ ์ธ์ฐ๊ธฐ
์ํ์์ ์ธ์ฐ๋ ์ฌ๊ณ ์ ์ถ๋ฐ์ ์ '์ต์ ํด์ ์ผ๋ถ๋ถ์ด ๊ทธ ๋ถ๋ถ์ ๋ํ ์ต์ ํด์ธ๊ฐ?' ๋ผ๊ณ ๋ฐฐ์ ๋ค.
์ ์ N์ 1๋ก ๋ง๋๋ ์ต์ ํ์๋ฅผ ๊ตฌํ๋ ํจ์๋ฅผ D(N)์ด๋ผ๊ณ ํ์.
์ต์ ํด๋ฅผ ์๊ฐํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
D(10)์ 10์ 2๋ก ๋๋ D(5)
์, 10์์ 1์ ๋บ D(9)
์ค ๋ ์์ ๊ฐ + 2๋ก ๋๋๊ฑฐ๋ 1์ ๋บ ์ฐ์ฐํ์ 1
๊ณผ ๊ฐ๋ค.
D(12)๋ 12๋ฅผ 3์ผ๋ก ๋๋ D(4)
์, 12๋ฅผ 2๋ก ๋๋ D(5)
, 12์์ 1์ ๋บ D(11)
์ค ๋ ์์๊ฐ + ์ฐ์ฐ์ ํ์ 1
๊ณผ ๊ฐ๋ค.
'์ต์ ํด์ ์ผ๋ถ๋ถ์ด ๊ทธ ๋ถ๋ถ์ ๋ํ ์ต์ ํด์ธ๊ฐ?'์ ๋ํด์ ์๊ฐํด๋ณด๋ฉด
์ต์ ํดD(10)์ ์ผ๋ถ๋ถ D(5), D(9)๋ ๊ทธ ๋ถ๋ถ์ ๋ํ ์ต์ ํด๊ฐ ๋ง๋ค.
์ต์ ํดD(12)์ ์ผ๋ถ๋ถ D(4), D(5), D(11)๋ ๊ทธ ๋ถ๋ถ์ ๋ํ ์ต์ ํด๊ฐ ๋ง๋ค.
์ด์ ์ํ์์ ์ธ์๋ณด์๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํด์ผ ํ ์ ์ด ์๋๋ฐ n์ด 3 ๋๋ 2๋ก ๋๋ ๋จ์ด์ ธ์ผ D(n//3) ๋๋ D(n//2)๋ฅผ ํ ์ ์๋ค.
2-2.base case๋ก ์๋ ดํ๋์ง ํ์ธ
์ ๊ทธ๋ฆผ์์ D(n//3), D(n//2), D(n-1)์ base case์ธ n==1์ด๋ n==2๋ก ์๋ ดํ๋ค.
2-3.์ํ์์ ๊ณ์ฐ
bottom-up ๋ฐฉ์(์ํ์์ ์ค๋ฅธ์ชฝ์ ๋ฑ์ฅํ๋ ๊ฐ์ด ์ผ์ชฝ์ ๋ฑ์ฅํ๋ ๊ฐ๋ณด๋ค ๋จผ์ ๊ณ์ฐ)์ผ๋ก ์ฐ์ฐ์ ํ๋ ค๋ฉด ๋นจ๊ฐ์ ํ์ดํ์ ๊ฐ์ด ์ธ๋ฑ์ค ์ค๋ฆ์ฐจ์์ผ๋ก ๊ณ์ฐํ๋ฉด ๋๋ค.
3.์ฝ๋
์ํ์์ bottom-up ๋ฐฉ์์ผ๋ก ๊ณ์ฐํ๊ธฐ ์ํด์ for๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ -1์ฐ์ฐ d[i] = 1 + d[i-1]
์ ์ด๋ค ์ ์์ด๋์ง ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ ์ผ ์ฒ์ ์ํํ๋๋ก ์์ฑํ๋ค.
๋ค์์ผ๋ก 3๋๋ 2๋ก ๋๋๋ ์ฐ์ฐ์ i๊ฐ 3๋๋ 2๋ก ๋๋ ๋จ์ด์ ธ์ผ ํ๊ธฐ๋๋ฌธ์ if๋ฌธ์ผ๋ก ๊ฒ์ฌ๋ฅผ ํด์คฌ๋ค.
์ถ๊ฐ๋ก min๊ฐ์ ๊ตฌํ๊ธฐ ์ํด if๋ฌธ์ and ์กฐ๊ฑด์ผ๋ก ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ค.
import sys
input = sys.stdin.readline
N=int(input())
d=[0]*(N+1)
for i in range(1,N+1):
if i==1:
d[i]=0
elif i==2:
d[i]=1
else:
d[i] = 1 + d[i-1]
if i%3==0 and d[i]>1+d[i//3]:
d[i]=1+d[i//3]
if i%2==0 and d[i]>1+d[i//2]:
d[i]=1+d[i//2]
print(d[N])
'๐์ฝ๋ฉํ ์คํธ:CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 11053๋ฒ-ํ์ด์ฌ]๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (0) | 2023.06.20 |
---|---|
[๋ฐฑ์ค 11052๋ฒ-ํ์ด์ฌ]์นด๋ ๊ตฌ๋งคํ๊ธฐ (0) | 2023.06.20 |
[๋ฐฑ์ค 6588๋ฒ-ํ์ด์ฌ]๊ณจ๋๋ฐํ์ ์ถ์ธก (0) | 2023.06.20 |
[๋ฐฑ์ค 17298๋ฒ-ํ์ด์ฌ]์คํฐ์ (0) | 2023.06.20 |
[๋ฐฑ์ค 1406๋ฒ-ํ์ด์ฌ]์๋ํฐ (0) | 2023.06.20 |