DHistory

[Baekjoon] DP - 1699 제곱수의 합 본문

Computer Science/Algorithm

[Baekjoon] DP - 1699 제곱수의 합

ddu0422 2023. 9. 25. 11:32

문제

 

1699번: 제곱수의 합

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

www.acmicpc.net

 

풀이

n = int(input())


def solution(n):
    d = list(range(n + 1))

    for i in range(1, n + 1):
        for j in range(int(i ** .5), 0, -1):
            if i == j * j:
                d[i] = 1
            elif i > j * j:
                d[i] = min(d[i - j * j] + d[j * j], d[i])

    return d[n]


print(solution(n))

 

채점 결과