Hikenny25

17626 - Four Squares 본문

baekjoon (solved.ac)/class 3 Solve

17626 - Four Squares

hikenny 2022. 10. 30. 11:56

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

 

17626번: Four Squares

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

www.acmicpc.net

 

 

- Dynamic Programming

 

import sys
input = sys.stdin.readline

def isint(x):
    return not (x-int(x))

n = int(input())

dp = [int(1e9)] * (n+1)
dp[1] = 1

k = [1]
for i in range(2, n+1):
    if isint(i**0.5):
        dp[i] = 1
        k.append(int(i**0.5))
        continue

    
    dp[i] = min([dp[i-(x**2)] for x in range(int((i//2)**0.5), k[-1]+1)]) + 1

print(dp[n])

 

동전 거스름돈 문제 중에 배수로 주어지지 않는 경우에, 주어진 동전 값을 뺀 dp 중 최소를 비교하는게 있는데 그 문제랑 비슷해서 dp식 구현은 그렇게 어렵지 않았다

 

근데 python3으로 제출하니까 시간 초과가 떠서.. pypy3로 제출하니 정답이 떴다

'baekjoon (solved.ac) > class 3 Solve' 카테고리의 다른 글

1697 - 숨바꼭질  (0) 2022.10.31
2178 - 미로 탐색  (0) 2022.10.30
1780 - 종이의 개수  (0) 2022.10.30
1074 - Z  (0) 2022.10.30
18870 - 좌표 압축  (0) 2022.10.30
Comments