[DP] 9655 돌 게임 C++

Seunghyeon·2023년 2월 24일

백준 문제 푼다.

목록 보기
13/21


풀이

1번 풀이. 결론만 보자면 짝수면 SK 홀수면 CY를 출력

2번 풀이. DP로 풀어보기
점화식 : ( DP[i] = min ( DP[i - 1] + 1, DP[i - 3] + 1 )


코드

1번 코드

#include <bits/stdc++.h>

using namespace std;

int n;

int main()
{
	cin >> n;

	// 돌이 1개면 내가 이김
	// 돌이 2개면 앞에 사람이 이김
	// 돌이 3개면 내가 이김
	// 돌이 4개면 앞에 사람이 이김
	// 돌이 5개면 내가 이김
	// 돌이 6개면 앞에 사람이 이김
	// 돌이 7개면 내가 이김
	// 돌이 8개면 앞에 사람이 이김

	// 즉 4개를 맞추기만 하면 상대방이 무조건 이김 ( -> 짝수면 상대가 이김 )

	if (n % 2 == 0)
		cout << "CY";
	else
		cout << "SK";

	return 0; 
}

2번 코드

#include <bits/stdc++.h>

using namespace std;

int dp[1001] = { 0, };
int n;
int main()
{
	cin >> n;

	dp[1] = 1;
	dp[2] = 2;
	dp[3] = 1;

	for (int i = 4; i <= n; i++)
	{
		dp[i] = min(dp[i - 1] + 1, dp[i - 3] + 1);
	}

	if (dp[n] % 2 == 0)
	{
		cout << "CY";
	}
	else
	{
		cout << "SK";
	}

	return 0;
}

후기

처음에는 그냥 간단하게 "엥 짝수 홀수에 따라 나누면 끝 아닌가" 해서 그렇게 풀었는데

DP로 풀어보려고 하니 생각이 잘 안됐다.

DP로 사고하는 방법을 체화해야겠다.

profile
그냥 합니다.

0개의 댓글