2022. 1. 7. 23:53ใ๐ฑ Algorithm/DP
https://www.acmicpc.net/problem/1699
์ค๋ต ์ฝ๋
ํ ์คํธ ์ผ์ด์ค๋ ๋ชจ๋ ๋ง์ท๊ธธ๋ ์ ๋ต์ธ์ค ์ฐฉ๊ฐํ๋ค.
from math import sqrt
N = int(input())
n = N
count = 0
while N > 0:
if int(sqrt(n)) == sqrt(n):
N -= n
count += 1
n = N
else:
n -= 1
print(count)
๋ฐ๋ก๋ 12 ๋ฅผ ์ ๋ ฅํ ๋์ธ๋ฐ, ์ ์ฝ๋์์ 4๊ฐ ์ถ๋ ฅ๋์ง๋ง, ์ ๋ต์ 3์ด๋ค.
2^2 + 2^2 + 2^2 = 12๊ฐ ๋๋ ๊ฒ์ธ๋ฐ, ์ค๋ต ์ฝ๋์์๋ 3^2 + 1^2 + 1^2 + 1^2 ๋ก ์ธํด 4๊ฐ์ ์๊ฐ ๋ํด์ ธ 4๊ฐ ์ถ๋ ฅ๋์ด ์ค๋ต์ด ๋๋ค.
์ด๋ฐ ์ค๋ต์ด ๋ฐ์ํ๋ ์์ธ์, N์ 1์ฉ ์ค์ฌ๊ฐ๋ฉด์ ์ ๊ณฑ๊ทผ์ ๊ตฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค์ ๋งํด ํฐ ์๋ถํฐ ์ ๊ณฑ์๋ฅผ ๊ตฌํ๊ธฐ ๋๋ฌธ์ธ๋ฐ, 12๊ฐ์ ๋ฐ๋ก ์ผ์ด์ค๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ์์ ์ ๊ทผ์ผ๋ก๋ ๋ต์ ๋๋ฌํ ์ ์๋ค.
์ ๋ต ์ฝ๋
N = int(input())
dp = [x for x in range(N + 1)]
for i in range(1, N + 1):
for j in range(1, i):
if j * j > i:
break
if dp[i] > dp[i - j * j] + 1:
dp[i] = dp[i - j * j] + 1
print(dp[N])
dp ๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ ๋ค. ์ด ๋ฐฐ์ด์ ์ด๊ธฐ ๋ด๋ถ ๊ฐ์ ๊ฐ ์ธ๋ฑ์ค์ ๋์ผํ ๊ฐ์ ๋ํ๋ธ๋ค.
N ์ด๋ผ๋ ํ๊ฒ ๋๋ฒ์ ์ ๊ณฑ์๋ฅผ ๋ฐ๋ก ๊ตฌํ๋ ๊ฒ์ด ์๋,
N ๋ณด๋ค ์์ ์ (i) ์ ์ ๊ณฑ์๋ฅผ ๋จผ์ ๊ตฌํ๋ฉด์ N ๊น์ง ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋๊ฒ ๋ค.
์ ๋ต ์ฝ๋๋ฅผ ์กฐ๊ธ ๋ฆฌํฉํ ๋ง ํ ์๋ ์๋ค.
N = int(input())
dp = [x for x in range(N + 1)]
for i in range(1, N + 1):
for j in range(1, i):
if j * j > i:
break
dp[i] = min(dp[i], dp[i - j * j] + 1)
# if dp[i] > dp[i - j * j] + 1:
# dp[i] = dp[i - j * j] + 1
print(dp[N])
'๐ฑ Algorithm > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 11055 ํ์ด์ฌ (0) | 2022.01.23 |
---|---|
๋ฐฑ์ค 1912 ํ์ด์ฌ (0) | 2022.01.20 |
๋ฐฑ์ค 11053 ํ์ด์ฌ (0) | 2022.01.18 |
๋ฐฑ์ค 12852 ํ์ด์ฌ (1) | 2022.01.12 |
๋ฐฑ์ค 2293 ํ์ด์ฌ (0) | 2022.01.09 |