๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ช๐Ÿป์ฝ”๋”ฉํ…Œ์ŠคํŠธ/๋ฐฑ์ค€ & ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[DP] ๋ฐฑ์ค€ 1699 ์ œ๊ณฑ์ˆ˜์˜ ํ•ฉ python

๐Ÿ“„ ๋ฐฑ์ค€ 1699 ์ œ๊ณฑ์ˆ˜์˜ ํ•ฉ ๐Ÿ“„

www.acmicpc.net/problem/1699

 

1699๋ฒˆ: ์ œ๊ณฑ์ˆ˜์˜ ํ•ฉ

์–ด๋–ค ์ž์—ฐ์ˆ˜ N์€ ๊ทธ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ œ๊ณฑ์ˆ˜๋“ค์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 11=32+12+12(3๊ฐœ ํ•ญ)์ด๋‹ค. ์ด๋Ÿฐ ํ‘œํ˜„๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, 11์˜ ๊ฒฝ์šฐ 11=22+22+12+12+12(5๊ฐœ ํ•ญ)๋„ ๊ฐ€๋Šฅํ•˜๋‹ค

www.acmicpc.net


๐Ÿค” ๋ฌธ์ œ ํ’€์ด  ๐Ÿค”

์ˆซ์ž๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ œ๊ณฑ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ํ•ญ์˜  ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๋จผ์ € ๋ชจ๋“  ์ˆซ์ž๋Š” 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])