๐ ๋ฐฑ์ค 1699 ์ ๊ณฑ์์ ํฉ ๐
๐ค ๋ฌธ์ ํ์ด ๐ค
์ซ์๊ฐ ์ฃผ์ด์ง ๋ ์ ๊ณฑ์์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ ์ต์ ํญ์ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๋จผ์ ๋ชจ๋ ์ซ์๋ 1์ ์ ๊ณฑ์ผ๋ก ๋ง๋ค ์ ์์ผ๋ฉฐ ๊ทธ ๋ ํญ์ ๊ฐฏ์๋ ์ซ์ n์ผ ๋ n๊ฐ ์ด๋ค.
์ด์ 1๋ถํฐ n๊น์ง ์ซ์๋ฅผ ์ฆ๊ฐ์์ผ๊ฐ๋ฉด์ ๊ฐ๊ฐ์ ์ซ์์ ๋ํด ์ต์ํญ์ ๊ฐฏ์๋ฅผ ๊ตฌํด๋ณด์.
1์ผ ๋๋ 1๊ฐ์ด๋ค.
2์ผ ๋๋ 1^2, 1^2 2๊ฐ์ด๋ค.
3์ผ ๋๋ 3๊ฐ
4์ผ ๋๋ (1^2 ) * 4 4๊ฐ๋ ๋๋ 4๋ณด๋ค ์์ ์ ์ค ๊ฐ๋ฅํ ๋ชจ๋ ์ ๊ณฑ์๋ฅผ ๋ง๋ค์ด๋ณด๋ฉด "2^2 = 4"์ด๋ฏ๋ก 1๊ฐ์ด๋ค.
dp[4] = min(dp[4], dp[4 - (2^2)])
์ด๋ ๊ฒ n๊น์ง ์งํํ๋ฉด ๊ฐ๊ฐ์ ๋จ๊ณ์์ ํ์ฌ ๊ฐ์ ์ต์ํญ์ ๊ฐฏ์๋ฅผ ๊ณ์ฐํ๊ฒ ๋๋ค.
๊ฐ๊ฐ์ ๋จ๊ณ์์ ๊ตฌํ ์ด ์ต์ํญ์ ๊ฐฏ์๋ฅผ ์ด์ฉํด ์ฐ๋ฆฌ๊ฐ ์ํ๋ n์ ์ต์ํญ์ ๊ฐฏ์๋ฅผ ๊ตฌํด๋ผ ์ ์๋ค.
โจ๏ธ ์ฝ๋ โจ๏ธ
import math
n = int(input())
dp = [0] * (n + 1)
for i in range(1, n + 1):
dp[i] = i
for j in range(1, int(math.sqrt(i)) + 1):
dp[i] = min(dp[i], dp[i - j * j] + 1)
print(dp[n])
'๐ช๐ป์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค & ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ตฌํ, ์๋ฎฌ๋ ์ด์ ] 20061 : ๋ชจ๋ ธ๋ฏธ๋ ธ๋๋ฏธ๋ ธ 2 python (0) | 2021.04.07 |
---|---|
[DP] ๋ฐฑ์ค 11058 ํฌ๋ฆฌ๋ณด๋ python (0) | 2021.04.03 |
[BFS, ๊ตฌํ] ๋ฐฑ์ค 16236 ์๊ธฐ ์์ด python (0) | 2021.04.01 |
[DP] ๋ฐฑ์ค 2133 ํ์ผ์ฑ์ฐ๊ธฐ python (0) | 2021.04.01 |