https://www.acmicpc.net/problem/1699
๐ ๋ฌธ์
๐ ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100,000)
๐ ์ถ๋ ฅ
์ฃผ์ด์ง ์์ฐ์๋ฅผ ์ ๊ณฑ์์ ํฉ์ผ๋ก ๋ํ๋ผ ๋์ ๊ทธ ์ ๊ณฑ์ ํญ์ ์ต์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
๐ ํ์ด ๋ฐฉ์
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ๋๋ฐ ์๊ฐ๋ณด๋ค ์ค๋ ๊ฑธ๋ฆฐ ๋ฌธ์ ์ ๋๋ค ๐ฅน
(1) ์ ๊ณฑ์๋ค์ ๋ฐฐ์ด์ ๋ง๋ค๊ธฐ
(2) ๊ฐ ์ซ์ n ์ ๋ํด ๊ฐ์ฅ ์ ์ ์ ๊ณฑ์์ ํฉ์ผ๋ก ํํํ๋ ์ต์ ๊ฐ์๋ฅผ ๊ตฌํ๋ค
* ํ์ฌ ์ซ์ n ๋ณด๋ค ์ ์ ์ ๊ณฑ์ ์ค์์ dp[n-์ ๊ณฑ์] + 1 ์ด ๊ฐ์ฅ ์ ์ ๊ฒฝ์ฐ๋ก ์ ๋ฐ์ดํธ
(3) N ์ ์ต์ ์ ๊ณฑ์ ๊ฐ์๋ฅผ ์ถ๋ ฅ
๐ ์ฝ๋
N = int(input())
dp = [0 for _ in range(N + 1)]
squares = []
for n in range(1, N+1):
if n ** 2 <= N:
dp[n ** 2] = 1
squares.append(n ** 2)
if n <= 3:
dp[n] = n
elif dp[n] == 0:
m = dp[n-1] + 1
for square in squares:
if square > n:
break
m = min(m, dp[n-square] + 1)
dp[n] = m
print(dp[-1])
'๐ฉ๐ปโ๐ป ์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 31964๋ฒ ๋ฐํ ํ์ (Python) (0) | 2025.02.12 |
---|---|
[๋ฐฑ์ค] 1920๋ฒ ์ ์ฐพ๊ธฐ (Python) (0) | 2025.02.11 |
[๋ฐฑ์ค] 1965๋ฒ ์์๋ฃ๊ธฐ (Python) (0) | 2024.11.27 |
[๋ฐฑ์ค] 1912๋ฒ ์ฐ์ํฉ (Python) (1) | 2024.11.15 |
[๋ฐฑ์ค] 11727๋ฒ 2xn ํ์ผ๋ง 2 (Python) (0) | 2024.10.11 |