공부/백준

백준 9655번: 돌 게임(C++)

상연 2020. 12. 4. 21:26

목차

    www.acmicpc.net/problem/9655

     

    9655번: 돌 게임

    상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.

    www.acmicpc.net

    코드

    #include <iostream>
    using namespace std;
    
    int n;
    int dp[1000];
    
    int min(int a, int b){
    	return a < b ? a : b;
    }
    
    void solve(){
    	dp[0] = 1;
    	dp[1] = 2;
    	dp[2] = 1;
    	for(int i=3; i<n; i++){
    		dp[i] = min(dp[i-3] + 1, dp[i-1] + 1);
    	}
    	if(dp[n-1] % 2) cout << "SK";
    	else cout << "CY";
    }
    int main() {
    	cin >> n;
    	solve();
    	return 0;
    }

     

    풀이

    DP를 사용해서 푼 문제입니다.

    문제에서 완벽하게 게임을 했다는 것에 주목했습니다.

    완벽하게 게임을 했다는 것은 서로 돌을 가져간 횟수가 최소일 때를 이릅니다.

    그렇기 때문에 DP를 사용해서 서로 돌을 가져간 횟수가 최소가 될 때를 구해준 후

    그 횟수를 2로 나누었을때 홀수이면 상근, 짝수이면 찬영을 출력하면 풀 수 있는 문제였습니다.

     

    + 20.12.04 기준 시험기간이라 상세한 풀이를 적지 않았습니다. 시험이 끝나면 상세한 풀이를 첨가할 예정입니다.