https://www.acmicpc.net/problem/9655
9655번: 돌 게임
상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
www.acmicpc.net
생각해 보기
- 상근이와 창영이는 항상 최선의 수만을 둔다.
- 만약 1개를 놓던 3개를 놓던 자신이 이기는 경우가 있다면 그 수만 둘 것이다.
- 이미 해봤던 경우를 메모이제이션으로 지워주자.
코드
더보기
#include<iostream>
using namespace std;
int N;
int dp[1001][2];
int dfs(int cnt, int who){
if(dp[cnt][who])
return dp[cnt][who];
int wflag = who?1:-1;
int fflag = who?-1:1;
if(cnt==N)
return fflag;
if(cnt+3<=N)
dp[cnt+3][who] = dfs(cnt+3,who?0:1);
dp[cnt+1][who] = dfs(cnt+1,who?0:1);
return dp[cnt][who] = (dp[cnt+1][who]==wflag || dp[cnt+3][who]==wflag)?wflag:fflag;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>N;
if(dfs(0,1)==1)
cout<<"SK"<<'\n';
else
cout<<"CY"<<'\n';
return 0;
}

728x90
'알고리즘 > 백준 문제' 카테고리의 다른 글
| 25757 - 임스와 함께하는 미니게임 (0) | 2023.02.24 |
|---|---|
| 8979 - 올림픽 (0) | 2023.02.24 |
| 10431 - 줄 세우기 (0) | 2023.02.23 |
| 5073 - 삼각형과 세 변 (0) | 2023.02.22 |
| 23971 - ZOAC 4 (0) | 2023.02.22 |
댓글