세상을 더 좋게

[백준] 1699 '제곱수의 합' 파이썬(python) 본문

Algorithm/DP

[백준] 1699 '제곱수의 합' 파이썬(python)

나는SOU 2021. 12. 8. 00:00

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

 

1699번: 제곱수의 합

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

www.acmicpc.net

import sys
import math

n = int(sys.stdin.readline())

dp = [0] * (n+1)

for i in range(1, n+1):
    dp[i] = i
    for j in range(1, int(math.sqrt(i))+1):
        if (j*j) > i :
            break
        if dp[i] > dp[i - j * j]+1:
            dp[i] = dp[i - j * j]+1

print(dp[n])

Point

  • DP문제
  • dp테이블을 만들고 그것의 값들을 변경해가며 푸는 문제
  • range의 이해