본문 바로가기
전공공부/코딩테스트

(c++) 백준 "17626)Four Squares"

by 시아나 2022. 6. 5.

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

 

17626번: Four Squares

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

www.acmicpc.net


#include <iostream>
#include <cmath>
using namespace std;

int main() {
	int N; cin >> N;
	int nums[50001];
	fill_n(nums, 50001, 50001);
	for (int i = 1; i <= N; i++) {
		for (int k = 1; k <= sqrt(i); k++) {
			nums[k*k] = 1;
			int comp = nums[k * k] + nums[i - (k * k)];
			nums[i] = min(nums[i],comp);
		}
	}
	cout << nums[N] << endl;
	return 0;
}