본문 바로가기
백준 알고리즘

파이썬) 백준 알고리즘 | 1699번 : 제곱수의 합

by 코딩새내기_ 2022. 6. 30.

https://www.acmicpc.net/problem/1699

 

1699번: 제곱수의 합

어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다

www.acmicpc.net

 

pseudo code

dp 배열을 만든다
dp[i]에는 dp[i-1]과 dp[i-n^2]들을 비교해서 최솟값을 할당한다
dp[-1]을 출력한다

 

import math
n = int(input())
dp = [0] * (n+1)

for i in range(1, n+1):
    a = math.floor(i**0.5)
    dp[i] = min(dp[i-1]+1, dp[i-a**2]+1)
    for j in range(a):
        dp[i] = min(dp[i], dp[i-j**2]+1)
print(dp[-1])

댓글