728x90
반응형
https://www.acmicpc.net/problem/17626
1. Logic
dp배열에는 해당 숫자를 만들수 있는 최소 갯수를 저장한다.
숫자를 중복해서 골라도 되고 해당 숫자를 고를수도, 안고를 수도 있으니 i*i를 구하는 for문 안에서 숫자를 선택하는 경우 선택하지 않는 경우를 반영해준다.
2. Code
#include<bits/stdc++.h>
using namespace std;
int n;
int dp[50001];
int solve(int sum, int cnt) {
if(sum == n) return 0;
else if(sum > n) return 0x3f3f3f3f;
int &ret = dp[sum];
if(ret != -1) return ret;
ret = 0x3f3f3f3f;
for(int i = 1; i*i <= n; i++) {
ret = min(ret, solve(sum + i*i, cnt+1) + 1);
ret = min(ret, solve(sum, cnt));
}
return ret;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
memset(dp, -1, sizeof(dp));
cin >> n;
cout << solve(0, 0) << endl;
}
알고리즘 Solve 후 제가 생각한 Logic을 기록하는 개인 공부 블로그입니다.
내용 중 최적화가 가능한 부분등은 언제든지 댓글로 틀린 부분 및 피드백 주시면 공부 및 반영하겠습니다🧐
728x90
반응형
'Algorithm > Beakjoon' 카테고리의 다른 글
[백준/Baekjoon] 2444 별 찍기 - 7 C++ :: Implementation (0) | 2024.02.10 |
---|---|
[백준/Baekjoon] 2887 행성 터널 C++ :: MST (1) | 2024.02.07 |
[백준/Baekjoon] 1952 달팽이2 C++ :: Implementation || Math (1) | 2024.01.28 |
[백준/Baekjoon] 20057 마법사 상어와 토네이도 C++ :: Implementation (0) | 2024.01.27 |
[OS/운영체제] Banker's Algorithm / 은행원 알고리즘 (2) | 2024.01.26 |