알고리즘/백준풀이6. 다이나믹프로그래밍
(17) [C++, Java] 백준 No.1699 : 제곱수의 합
Storage Gonie
2019. 5. 17. 15:51
반응형
문제
풀이
자세한 풀이 : https://ldgeao99.tistory.com/entry/챕터3-18-DP-문제-풀이4-1-백준-No1699-제곱수의-합
# C++
#include<iostream>
using namespace std;
int d[100001];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++){
d[i] = i; // 최대값을 초기값으로 넣어줌. 1을 i번 하면 최대값이기 때문.
for(int j = 1; j*j <= i; j++){
if(d[i] > d[i -(j*j)] + 1)
d[i] = d[i -(j*j)] + 1;
}
}
cout << d[n] << "\n";
}
# Java
import java.util.*;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] d = new int[n+1];
for (int i=1; i<=n; i++) {
d[i] = i;
for (int j=1; j*j <= i; j++) {
if (d[i] > d[i-j*j] + 1) {
d[i] = d[i-j*j] + 1;
}
}
}
System.out.println(d[n]);
}
}
반응형