9657. 돌 게임 3


문제

돌 게임은 두 명이서 즐기는 재밌는 게임이다.

탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개, 3개 또는 4개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 이기게 된다.

두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 상근이가 먼저 시작한다.

입력

첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1000)

출력

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

예제 입력 

6

예제 출력 

SK



1-1) 풀이 1


돌 게임 1(http://js1jj2sk3.tistory.com/30)과 비슷한 문제다. 4개도 가져갈 수 있다는 조건만 추가해주면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <string.h>
using namespace std;
 
#define my 1
#define your 0
#define win true
#define lose false
 
int n;
int dp[2][1001];
 
int func(int turn, int remain) {
    if (remain == 0) {
        if (turn == my)
            return dp[turn][remain] = lose;
        if (turn == your)
            return dp[turn][remain] = win;
    }
 
    if (remain < 0) {
        if (turn == my)
            return 1;
        if (turn == your)
            return 0;
    }
 
    if (dp[turn][remain] != -1)
        return dp[turn][remain];
 
    if (turn == my)
        dp[my][remain] =
        func(turn ^ 1, remain - 1| func(turn ^ 1, remain - 3| func(turn ^ 1, remain - 4);
 
    if (turn == your)
        dp[your][remain] =
        func(turn ^ 1, remain - 1& func(turn ^ 1, remain - 3& func(turn ^ 1, remain - 4);
 
    return dp[turn][remain];
}
 
int main() {
    scanf("%d"&n);
    memset(dp, -1sizeof(dp));
 
    if (func(1, n) == win)
        puts("SK");
    else
        puts("CY");
 
    return 0;
}
cs



1-2) 풀이 2 


0개라면 이미졌다.


1개면 이긴다.


2개면 진다.


3개면 이긴다.


4개면 이긴다.


까지가 기본적인 전략이고, http://js1jj2sk3.tistory.com/30 에서 설명한 추가 전략대로면,


5개면 완벽한 선택으로 상대에게 1, 3, 4 상태를 만들어 주지 않기 위해 3개를 가져가야 한다.


6개면 동일하게 4개를 가져가야 한다.


7개면 1개를 가져가든(나머지 6) 3개를 가져가든(나머지 4) 4개를 가져가든(나머지 3) 상대의 필승이다.


7개일 때부터는 이미 가져갈 수 있는 세 가지 전략에 대해 결과를 이미 알고 있다.


따라서 0개 ~ 6개의 결과가 반복될 것을 알 수 있다. (패/승/패/승/승/승/승)

'알고리즘 > Dynamic Programming 동적계획법' 카테고리의 다른 글

백준) 3032 승리(IVANA)  (0) 2017.08.23
백준) 11062 카드게임(Card Game)  (1) 2017.08.23
백준) 9656 돌 게임 2  (0) 2017.08.17
백준) 9655 돌 게임  (0) 2017.08.17
백준) 11066 파일 합치기  (6) 2017.07.09

+ Recent posts