문제 링크 : www.acmicpc.net/problem/17626
내 풀이1(2021.1.22.) :
#include <iostream>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n; cin >> n;
bool stop = false;
int a, b, c, d;
for (a = 0; a < 224; a++) {
for (b = a; b < 224; b++) {
for (c = b; c < 224; c++) {
for (d = c; d < 224; d++) {
if (a * a + b * b + c * c + d * d == n) {
stop = true;
break;
}
}
if (stop) break;
}
if (stop) break;
}
if (stop) break;
}
int cnt = 0;
if (a != 0) cnt++;
if (b != 0) cnt++;
if (c != 0) cnt++;
if (d != 0) cnt++;
cout << cnt;
return 0;
}
방법 : 브루트 포스
내 풀이2(2021.1.22.) :
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int dp[50001];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n; cin >> n;
for (int i = 1; i <= n; i++) {
dp[i] = 4;
}
for (int i = 1; i * i <= 50000; i++) {
dp[i * i] = 1;
}
for (int i = 2; i <= n; i++) {
int j = (int)sqrt(i);
for(int j = 0; i - j * j > 0; j++){
dp[i] = min(dp[i], dp[i - j * j] + dp[j * j]);
}
}
cout << dp[n];
return 0;
}
방법 : DP
'알고리즘 > DP' 카테고리의 다른 글
백준 1932번 : 정수 삼각형 (0) | 2021.01.29 |
---|---|
백준 1149번 : RGB 거리 (0) | 2021.01.29 |
백준 2579번 : 계단 오르기 (0) | 2021.01.22 |
백준 2294번 : 동전 2 (0) | 2021.01.19 |
백준 9095번 : 1, 2, 3 더하기 (0) | 2021.01.18 |