study/백준(BOJ)

[Python] 17626. Four Squares

bbooo 2023. 5. 12. 00:52
728x90

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

 

17626번: Four Squares

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

www.acmicpc.net

 

접근법

  • n을 제곱수의 합으로 표현하되, 가장 최소 개수를 찾는 문제이다.
# pypy로만 성공
def main():
    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:
            temp = n_list[i - (j ** 2)]
            min_v = min(min_v, temp)
            j += 1
        n_list[i] = min_v + 1
    print(n_list[n])

if __name__=="__main__":
    main()


사용된 알고리즘

다이나믹 프로그래밍, 브루트포스 알고리즘 

728x90