Algorithm

[백준] 설탕 2839번 (c++)

salmon16 2021. 4. 2. 10:43

출처 : 2839번: 설탕 배달 (acmicpc.net)

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net

풀이 방법

dp 문제로 쉬운 문제였다. 

재귀로 n을 입력받아 min(f(n-5), f(n-3)) + 1을 해주면 된다 

기저 조건으론 n이 음수이면 INF(매우 큰 값)를 리턴해서 선택되지 못하게 n이 0이면 0을 리턴해서 끝났다는 것을 알려 주었다

마지막 출력부분에선 f(n)이 INF보다 크면 -1을 리턴 아니면 f(n)의 리턴 값을 리턴해 주면 된다

#include <iostream>
#include <algorithm>
#include <memory.h> 
#include <vector>

using namespace std;

int dp[5001];
const int INF = 987654321;
int f(int n) {	
	// 기저 사례	
	if (n < 0) return INF;
	if (n == 0) return 0;
	// dp table 이용
	int& ret = dp[n];
	if (ret != -1) return ret;	
	ret = 0;
	ret = min(f(n - 5), f(n - 3)) + 1;	
	return ret;


}
int main(void) {
	memset(dp, -1, sizeof(dp));
	int N;
	cin >> N;
	int ans = f(N);
	if (ans > INF) cout << -1;
	else cout << ans;
	return 0;
}

'Algorithm' 카테고리의 다른 글

[백준] 1로 만들기 1463번 (c++)  (0) 2021.04.02
[algospot] Quantization (c++)  (0) 2021.04.02
[algospot] 폴리오미노 (c++)  (0) 2021.04.01
[백준] 가장 큰 정사각형 1915번 (c++)  (0) 2021.03.31
[학교 과제] 프리랜서 (c++)  (0) 2021.03.30