백준 python 기록
백준 python 1699 제곱수의 합
작지
2021. 7. 27. 12:29
백준 링크:https://www.acmicpc.net/problem/1699
1699번: 제곱수의 합
어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다
www.acmicpc.net

그리드 문제인줄 알고 도전했다가 실패했던 문제다.
dp를 사용하면 오류없이 도출가능
각 제곱수인 1,4,9 ''' 316 까지의 수를 저장해놓은 matrix를 사용해서 그 수가 나온만큼 뒤로 백하면 된다.
import math
n=int(input())
# 16까지 [0,1,2,3,1,2,3,4,2,1,2,3,3.2,3,4,1] 변하는수 =[4,8,9,12,13,16]
dp=[0 for i in range(n+1)]
matrix=[i*i for i in range(1,317)]
for i in range(1, n+1):
s = []
for j in matrix:
if j > i:
break
s.append(dp[i-j])
dp[i] = min(s) +1
print(dp[n])
개인적으로 어떻게 해야할지 몰라서 한시간이나걸렸다