[ baekjoon ] #2839 ์„คํƒ• ๋ฐฐ๋‹ฌ

eunheelogยท2023๋…„ 1์›” 5์ผ
0

baekjoon

๋ชฉ๋ก ๋ณด๊ธฐ
1/20

๋ฐฑ์ค€ #2839 ์„คํƒ• ๋ฐฐ๋‹ฌ

# Greedy Algorithm

๐Ÿ’ก Idea

  • N ํ‚ฌ๋กœ๊ทธ๋žจ์„ ์ •ํ™•ํžˆ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” 3kg, 5kg ์ค‘ ๋” ๋ฌด๊ฑฐ์šด 5kg๋กœ ๋‚˜๋ˆ ๋ด์•ผํ•œ๋‹ค.
  • 5kg์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๊ฐ€ 5kg๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด 3kg๋ฅผ ๋นผ๊ณ  cnt๋ฅผ ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค.

    Source Code

    #include <iostream>
    using namespace std;
    
    int main() {
    	int N, cnt = 0;
    	cin >> N;
    	while (N >= 0) {
    		if (N % 5 == 0) {
    			cnt += N / 5;
    			break;
    		}
    		N -= 3;
    		cnt++;
    		if (N <= 0) break;
    	}
    
    	if (N < 0) cout << "-1";
    	else cout << cnt;
    	return 0;
    }

# Dynamic Programming

  • ํ•˜๋‚˜์˜ ํฐ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์—ฌ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉ
  • ์ €์žฅํ•ด ๋‘” ๊ฐ’์„ ์ด์šฉ(๋ฉ”๋ชจ์ด์ œ์ด์…˜)

๐Ÿ’ก Idea

  1. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด dp ๋ฒกํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ MAX ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”
    vector<int> dp(N+1, MAX);
  2. 3kg์ผ ๋•Œ์™€ 5kg์ผ ๋•Œ๋ฅผ ์ €์žฅ
    dp[3]=dp[5]=1
  3. 6๋ถ€ํ„ฐ N๊นŒ์ง€ ํ•ด๋‹น ๊ฐ’์—์„œ 3kg๋ฅผ ๊ณจ๋ž์„ ๋•Œ์™€ 5kg๋ฅผ ๊ณจ๋ž์„ ๋•Œ์˜ ๊ฐ’์„ ๋น„๊ตํ•ด ์ž‘์€ ๊ฐ’ ์ €์žฅํ•ด์ฃผ๊ธฐ

Source Code

#include <iostream>
#include <vector>
using namespace std;

#define MAX 999999

int main() {
	int N;
	cin >> N;
	vector <int> dp(N + 1, MAX);
	dp[3] = dp[5] = 1;
	for (int i = 6; i <= N; i++) {
		dp[i] = min(dp[i - 3] + 1, dp[i - 5] + 1);
	}
	if (dp[N] >= MAX)cout << "-1";
	else cout << dp[N];

	return 0;
}
profile
โ›ง1์ผ 1์•Œ๊ณ ๋ฆฌ์ฆ˜โ›ง

0๊ฐœ์˜ ๋Œ“๊ธ€