#문제
https://www.acmicpc.net/problem/1699
#작성 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <iostream>
using namespace std;
int n;
int dp[100001];
//[i] : j를 만드는 방법의 수
int main(){
// n입력
cin>>n;
// dp배열을 1로만 이루어진 제곱수의 합(maximum case)으로 초기화한다.
for(int i=0; i<=n; i++){
dp[i] = i;
}
for(int i=1; i<=n; i++){
for(int j=1; j*j<=i; j++){
dp[i] = min(dp[i], dp[i-j*j]+1);
}
}
cout<<dp[n] <<'\n';
return 0;
}
|
cs |
##
n보다 작거나 같은 숫자들에 대해, 제곱수의 합의 최소 개수를 갱신해나가면서 답을 구해주어야 한다.
각 i에 대해, 제곱수의 합으로 i를 구성하는 경우 maximum case는 1+1+...+1의 케이스이다.
-> dp[i] = i로 초기화해준다.
'BOJ' 카테고리의 다른 글
BOJ 16500번 :: 문자열 판별 (0) | 2020.02.03 |
---|---|
BOJ 11052번 :: 카드 구매하기 (0) | 2020.02.03 |
BOJ 9465번 :: 스티커 (0) | 2020.02.02 |
BOJ 2618번 :: 경찰차 (0) | 2020.02.01 |
BOJ 10942번 :: 팰린드롬? (0) | 2020.01.28 |