๋ฌธ์
๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง - 17626๋ฒ
ํ์ด ๊ณผ์
ํน์ ์๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ต์ ์ ๊ณฑ์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
๋ง์ฝ N
์ ์ ๊ณฑ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด์๋ ์ต๋ N**0.5
๊น์ง๋ง ๊ฒ์ฌํด๋ณด๋ฉด ๋ฉ๋๋ค.
๋๋ฌธ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์์ ํ์
ํ๋ ๋ฐฉ๋ฒ๋ ์์ ์ ์์ง๋ง ์ด ๊ฒฝ์ฐ ์ค๋ณต ๊ฒ์ฌ๋ก ์ธํด ์๊ฐ์ด๊ณผ๋ฅผ ํผํ์ง ๋ชปํ๋ฉฐ
๋ฐ๋ผ์ ์ด๋ฅผ ์ต์ ํํ๊ธฐ ์ํด ๋์ ๊ณํ๋ฒ
์ ์ฌ์ฉํด์ผํฉ๋๋ค.
dp(n): n์ ๋ํ๋ด๊ธฐ ์ํ ์ต์ ์ ๊ณฑ์์ ๊ฐ์
๋ผ๊ณ ์ ์ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ ํ์์ ์ป์ ์ ์์ต๋๋ค.
do(n) = min(dp(n - k^2), dp(n - (k - 1)^2), ... dp(n - 1)) + 1
์ฝ๋
import sys
N = int(input())
def solution():
dp = [-1] * (N + 1)
dp[0] = 0
dp[1] = 1
for n in range(2, N + 1):
dp[n] = sys.maxsize
for k in range(1, int(n ** 0.5) + 1):
dp[n] = min(dp[n], dp[n - k**2] + 1)
return dp[N]
print(solution())
๋ฐ์ํ
'๐ algorithm > boj' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ 1963 - ์์ ๊ฒฝ๋ก (0) | 2021.03.18 |
---|---|
BOJ 4195 - ์น๊ตฌ ๋คํธ์ํฌ (0) | 2021.03.18 |
BOJ 1303 - ์ ์ - ์ ํฌ (0) | 2021.03.18 |
BOJ 1260 - DFS์ BFS (0) | 2021.03.18 |
BOJ 6550 - ๋ถ๋ถ ๋ฌธ์์ด (0) | 2021.03.18 |
๐ฌ ๋๊ธ