๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/groom

[C++/groom] Lv.3 : ๊ฑฐ๋ฆฌ๋‘๊ธฐ (DP)

by xxilliant 2025. 4. 18.
728x90
๋ฐ˜์‘ํ˜•

 

https://level.goorm.io/exam/160279/%EA%B1%B0%EB%A6%AC%EB%91%90%EA%B8%B0/quiz/1

 

๊ตฌ๋ฆ„LEVEL

๋‚œ์ด๋„๋ณ„ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ์œผ๋กœ์จ SW ์—ญ๋Ÿ‰์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

level.goorm.io


๊ตฌ๋ฆ„ ๋ ˆ๋ฒจ 3. 

DP์™€ ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ „์ฒ˜๋ฆฌ ๊ณ„์‚ฐ๊ฐ’(?)์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค

๊ตฌ๋ฆ„์€ ์ด๋Ÿฐ ์œ ํ˜•์ด ๋งŽ์€๊ฐ€.. ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ๋” ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค ใ… ใ… 

 

๊ฐ ์ƒํƒœ ๋ณ„ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์•„์„œ dp์— ์ ์ ˆํžˆ ๋”ํ•ด์ค˜์•ผ ํ•œ๋‹ค!

dp[i][j] -> i๋ฒˆ์งธ ์ค„์˜ ์ƒํƒœ๊ฐ€ j(0~5)์ผ ๋•Œ์˜ ๋ˆ„์  ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

 

๋‚˜์˜ ํ’€์ด

#include <iostream>
#include <vector>
using namespace std;
int main() {
	int n=0;
	int mod = 100000007;
	int dp[100001][5] = {0,}; // i๋ฒˆ์งธ ์ค„์˜ ์ƒํƒœ๊ฐ€ j์ผ๋•Œ, ๊ฒฝ์šฐ์˜ ์ˆ˜
	int answer = 0;
	
	// 0 {0,0,0}; // 5๊ฒฝ์šฐ์˜ ๋‹ค์Œ์— ์˜ฌ ์ˆ˜ ์žˆ์Œ
	// 1 {1,0,0}; // 3
	// 2 {0,1,0}; // 4
	// 3 {0,0,1}; // 3
	// 4 {1,0,1}; // 2

	cin >> n;
	for(int j=0; j<5; ++j){
    dp[1][j] = 1; // 1๋ฒˆ์งธ ์ค„ ์ƒํƒœ ์ดˆ๊ธฐํ™”
	}
	for(int i=2; i<=n; ++i){
		dp[i][0] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2] + dp[i-1][3] + dp[i-1][4]) % mod;
		dp[i][1] = (dp[i-1][0] + dp[i-1][2] + dp[i-1][3]) % mod;
		dp[i][2] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][3] + dp[i-1][4]) % mod;
		dp[i][3] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2]) % mod;
		dp[i][4] = (dp[i-1][0] + dp[i-1][2]) % mod;
	}
	for(int j=0; j<5; ++j){
    answer += dp[n][j];
		answer %= mod;
	}
	cout << answer;
	return 0;
}

728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜ > groom' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C++/groom] Lv.2 : ์žฅ๋งˆ  (0) 2025.04.18
[C++/groom] Lv.1 : ์ธ๊ณต์ง€๋Šฅ ์ฒญ์†Œ๊ธฐ  (0) 2025.04.18