본문 바로가기
알고리즘/dynamic programming

[백준][Python] 17626번 Four Squares

by 임짠짠 2022. 5. 9.
반응형
 

17626번: Four Squares

라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1

www.acmicpc.net

 

코드

n = int(input())
n_list = [0]*(n+1)
n_list[1] = 1
for i in range(2,n+1):
    j = 1
    min_v = 4
    while((j**2)<=i):
        a = n_list[i-(j**2)]
        min_v = min(min_v,a)
        j+=1
    n_list[i] = min_v+1    
print(n_list[n])

 

설명

규칙이 뭔지 모르겠어서 구글링을 해봤다. 

규칙은 n - (n보다 작거나 같은 제곱수) 를 인덱스로 갖는 값에 1을 더해주면 된다. 

문제에서 제곱수의 최대 개수가 4라고 했으므로 min_v 값을 4로 두고 더 작은 값이 존재하면 그 값으로 바꿔줬다. 

반응형

댓글