
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로 사고하는 방법을 체화해야겠다.