본문 바로가기
알고리즘/백준 문제

9655 - 돌 게임

by HDobby 2023. 2. 23.

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

댓글