[백준] 9655번: 돌 게임

2022. 9. 17. 20:04TIL💡/Algorithms

https://www.acmicpc.net/problem/9655

 

9655번: 돌 게임

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

www.acmicpc.net

문제의 완벽한 탐색이라는 게 있는데, 그건 최소 횟수로 돌을 가져온다는 뜻이다.

 

이 문제는 크게 2가지 풀이 방식이 있다.

1. 홀/짝 구분

2. 다이나믹 프로그래밍

 

압도적으로 1번이 편리하지만, 학습을 위해 2가지 방식 모두 시도하였다.

 

1번 풀이

각자 1개 또는 3개를 가져갈 수 있으므로 4n개 기준으로 케이스를 나눌 수 있다.

4n, 4n + 2의 경우 반드시 창영이가 승리하고, 4n + 1, 4n + 3의 경우 반드시 상근이가 승리한다.

이러한 경우를 고려해 홀수의 경우 상근이, 짝수의 경우 창영이가 승리한다는 방식을 쓸 수 있다.

 

2번 풀이

다이나믹 프로그래밍에 최소의 횟수를 기록하며 상근, 창영인지를 파악할 수 있다.

#include <iostream>
#include <vector>
using namespace std;
int dp[1001];

int main() {
    int n;
    cin >> n;
    
    dp[1] = 1;
    dp[2] = 2;
    dp[3] = 1;
    for(int i = 4;i <= n;i++) {
        dp[i] = min(dp[i - 1], dp[i - 3]) + 1;
    }
    
    if(dp[n] % 2 == 0) {
        cout << "CY" << '\n';
    }
    else {
        cout << "SK" << '\n';
    }
    
}

'TIL💡 > Algorithms' 카테고리의 다른 글

[백준] 2133번: 타일 채우기  (0) 2022.09.17
[백준] 21921번: 블로그  (0) 2022.09.17
[백준] 1927번: 최소 힙  (0) 2022.09.12
[백준] 1976번: 여행 가자  (0) 2022.09.12
[백준] 2467번: 용액  (0) 2022.09.12