ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๐ฉ ๋์ ํ๋ก๊ทธ๋๋ฐ(DP)
thinking
1. ๊ท์น์ ์ฐพ์๋ณด๋ ค ํ์ผ๋ ์คํจ -> ๊ท์น ์์ !
2. DP ์ ๊ทผ
์ธํ์ซ์์ ํฌ๊ธฐ๋งํผ ๋ฐฐ์ด์ ๋ง๋ค๊ณ , ๊ณ์ฐํ์๋ฅผ ํด๋น ์ธ๋ฑ์ค์ ์
๋ ฅ & ๋น๊ตํ๋ฉด์ ์ต์ ์ฐ์ฐ๊ฐ์ ๊ตฌํ๋ ๊ฒ์ด๋ค.
์์์ ๋ถํฐ ๊ณ์ฐ์ ํด๊ฐ๋ฉด์ ์นด์ดํ
์ ๋๋ ค๋๊ฐ๋ ๊ฒ์ด ํต์ฌ์ด๋ค !
โพ ์ ํ์ : dp(N) = min ( dp(N//3)+1, dp(N//2)+1 , dp(N-1)+1 )
โพ ์๊ฐ๋ณต์ก๋ : {๋ฐฐ์ด์ ํฌ๊ธฐ x O(1)} => O(N)
์ฝ๋
N = int(input())
dp = [0 for _ in range(N+1)] # ์ธ๋ฑ์ค๊ฐ N์ด ๋๋๋ก N+1 ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๋ง๋ฆ
for i in range(2, N+1):
dp[i] = dp[i-1] + 1 # dp(N-1)+1 ๊ณ์ฐ๋จผ์ ํด์ฃผ๊ณ
if i % 2 == 0 and dp[i] > dp[i//2] + 1: # 2๋ก ๋๋ ์ง๋ฉด์ ์นด์ดํ
ํ์๊ฐ ์ ๋ณด๋ค ํฌ๋ฉด ๋ฐ๊พธ๊ธฐ
dp[i] = dp[i//2] + 1
if i % 3 == 0 and dp[i] > dp[i//3] + 1: # 3์ผ๋ก ๋๋ ์ง๋ฉด์ ์นด์ดํ
ํ์๊ฐ ์ ๋ณด๋ค ํฌ๋ฉด ๋ฐ๊พธ๊ธฐ
dp[i] = dp[i//3] + 1
print(dp[N]) # == print(dp[-1])
'algorithm > baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1697. ์จ๋ฐ๊ผญ์ง / python ํ์ด์ฌ (0) | 2021.06.02 |
---|---|
[๋ฐฑ์ค] 1676. ํฉํ ๋ฆฌ์ผ 0์ ๊ฐ์ / python ํ์ด์ฌ (0) | 2021.06.02 |
[๋ฐฑ์ค] 1541. ์์ด๋ฒ๋ฆฐ ๊ดํธ / python ํ์ด์ฌ (0) | 2021.04.10 |
[๋ฐฑ์ค] 1620. ๋๋์ผ ํฌ์ผ๋ชฌ ๋ง์คํฐ ์ด๋ค์ / python ํ์ด์ฌ (0) | 2021.04.10 |
[๋ฐฑ์ค] 1389. ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น / python ํ์ด์ฌ (0) | 2021.04.08 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
TAG
- ์์ด๋๋ง์๊ธฐ
- react
- swea
- git ๋ฏธ๋ฌ๋ง
- 20057 ๋ง๋ฒ์ฌ ์์ด์ ํ ๋ค์ด๋
- 17406 ๋ฐฐ์ด๋๋ฆฌ๊ธฐ4
- dfs
- BFS
- ํ๋ก๊ทธ๋๋จธ์ค
- dp
- ๋ธ๋ฃจํธํฌ์ค
- merge ์๋ฌ
- 2579 ๊ณ๋จ์ค๋ฅด๊ธฐ
- ๊ธฐ์ง๊ตญ์ค์น
- ์๊ณ ๋ฆฌ์ฆ
- ์ผ์ฑ์ฝํ
- ํ์ด์ฌ
- ๋ฐฑ์ค
- 21609 ์์ด ์คํ๊ต
- 2018 ์นด์นด์ค ๊ณต์ฑ
- ์ผ์ฑ๊ธฐ์ถ
- ๋ณด์์ผํ
- merge์๋ฌ
- 20056 ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด๋ณผ
- Python
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
- Total
- Today
- Yesterday
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ