hades

[Baekjoon] 2579๋ฒˆ: ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ ๋ณธ๋ฌธ

๐Ÿ‘Š PS/Algorithm

[Baekjoon] 2579๋ฒˆ: ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ

hades1 2024. 7. 10. 17:53

๐Ÿฅ… ๋ฌธ์ œ

https://www.acmicpc.net/problem/2579

 

๐Ÿ” ์„ค๊ณ„

์‹œ์ž‘์ ์€ ๊ณ„๋‹จ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

ํ•œ ๊ณ„๋‹จ์—์„œ๋Š” ๋‹ค์Œ ๊ณ„๋‹จ์ด๋‚˜ ๋‹ค๋‹ค์Œ ๊ณ„๋‹จ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๊ณ„๋‹จ์€ ๋ฌด์กฐ๊ฑด ๋ฐŸ์•„์•ผ ํ•œ๋‹ค.

 

์žฌ๊ท€๋กœ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด, ๊ณ„๋‹จ์˜ ๊ฐœ์ˆ˜๊ฐ€ 300๊ฐœ์ด๋ฏ€๋กœ, O(2^300)์ด๋ฏ€๋กœ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.

 

์–ด๋–ค ๊ณ„๋‹จ๊นŒ์ง€์˜ ์ ์ˆ˜ ์ค‘ ์ตœ๋Œ“๊ฐ’์€ ์ „ ๊ณ„๋‹จ๊นŒ์ง€์˜ ์ ์ˆ˜+์–ด๋–ค ๊ณ„๋‹จ์˜ ์ ์ˆ˜์™€ ์ „์ „ ๊ณ„๋‹จ๊นŒ์ง€์˜ ์ ์ˆ˜+์–ด๋–ค ๊ณ„๋‹จ์˜ ์ ์ˆ˜๋ฅผ ๋น„๊ตํ•˜์—ฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 5๋ฒˆ์งธ ๊ณ„๋‹จ๊นŒ์ง€์˜ ์ด ์ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š”๋ฐ, 3๋ฒˆ์งธ์™€ 4๋ฒˆ์งธ ๊ณ„๋‹จ์˜ ์ ์ˆ˜๊ฐ€ ํ™œ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์–ด๋–ค ๊ณ„๋‹จ๊นŒ์ง€์˜ ์ ์ˆ˜๋ฅผ ๋‹จ์ˆœํžˆ ํ•˜๋‚˜๋กœ ์ €์žฅํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ๋‹ค์Œ ๊ณ„๋‹จ์—์„œ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ, ์–ด๋–ค ๊ณ„๋‹จ๊นŒ์ง€์˜ ์ ์ˆ˜๊ฐ€ ์ด๋ฏธ 2๋ฒˆ ์—ฐ์†๋˜์—ˆ๋‹ค๋ฉด, ๋‹ค์Œ ๊ณ„๋‹จ์—์„œ 3๋ฒˆ ์—ฐ์†๋˜์–ด ๊ทธ ์ ์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์—ฐ์† ํšŸ์ˆ˜์— ๋”ฐ๋ผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.

dp[i][1], dp[i][2]๋Š” ๊ฐ๊ฐ i๋ฒˆ์งธ ๊ณ„๋‹จ๊นŒ์ง€ ์—ฐ์† ํšŸ์ˆ˜๊ฐ€ 1, 2๋ผ๋Š” ์˜๋ฏธ์ด๊ณ , dp[i][0]์€ ๋‘˜ ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ์ €์žฅํ•˜์˜€๋‹ค.

 

์˜ˆ์™ธ์ ์œผ๋กœ, ์ฒซ ๋ฒˆ์งธ ๊ณ„๋‹จ์€ ์‹œ์ž‘์ ์œผ๋กœ๋ถ€ํ„ฐ ๋„๋‹ฌํ•  ์ˆ˜ ๋ฐ–์— ์—†์œผ๋ฏ€๋กœ, ์—ฐ์† ํšŸ์ˆ˜๊ฐ€ 1์ด๊ณ , ๊ณ„๋‹จ์ด 1๊ฐœ์ธ ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋ฏ€๋กœ ์ตœ๋Œ“๊ฐ’์„ ๊ฐฑ์‹ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

๐Ÿ‘Š ํ’€์ด

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std;	
int n;
vector<int> stage(301);
vector<vector<int>> dp(301, vector<int>(3));

int main() {
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);
	
	cin >> n;
	for (int i=1; i<=n; i++){
		cin >> stage[i];
	}

	dp[1][1] = stage[1];
	dp[1][0] = stage[1];
	for (int i=2; i<=n; i++){
		dp[i][1] = max(dp[i-2][1], dp[i-2][2]) + stage[i];
		dp[i][2] = dp[i-1][1] + stage[i];
		dp[i][0] = max(dp[i][1], dp[i][2]);
	}

	cout << dp[n][0] << "\n";

	return 0;
}

 

๐Ÿ“ ๋ฉ”๋ชจ

์ฒซ ๋ฒˆ์งธ ๊ณ„๋‹จ์˜ ์ตœ๋Œ“๊ฐ’๋„ ๊ฐฑ์‹ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.