문제
돌 게임은 두 명이서 즐기는 재밌는 게임이다.
탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개 또는 3개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 이기게 된다.
두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 상근이가 먼저 시작한다.
입력
첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1000)
출력
상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
풀이 과정
돌이 1개 남았을 때 : 상근이가 돌 1개 가져감 ( 상근 승리 )
돌이 2개 남았을 때 : 상근이가 돌 1개, 창영이가 돌 1개 가져감 ( 창영 승리 )
돌이 3개 남았을 때 : 상근이가 돌 3개 가져감 ( 상근 승리 )
돌이 4개 남았을 때 : 상근이가 돌 1개, 창영이가 돌 3개 가져가거나 상근이가 돌 3개, 창영이가 돌 1개 가져감 ( 창영 승리 )
...
돌의 개수가 커지면 커질수록 고려해야 할 경우가 많아지니, 다음과 같이 표기해보도록 하겠다.
돌이 1개 남았을 때 : 선공 승리 ( 현재 턴인 사람이 승리 )
돌이 2개 남았을 때 : 후공 승리 ( 현재 턴이 아닌 사람이 승리 )
돌이 3개 남았을 때 : 선공 승리 ( 현재 턴인 사람이 승리 )
돌이 4개 남았을 때 : 후공 승리 ( 현재 턴이 아닌 사람이 승리 )
이렇게 표시하면, 돌이 5개 이상 남았을 때를 계산하기 위해선 다음과 같이 표기할 수 있다.
돌이 5개 남았을 때 :
(1) 돌 1개를 가져가면 -> 돌이 4개 남았을 때 상황이 된다.
돌 1개를 상근이가 가져가면, 돌이 4개 남았을 때엔 후공 승리 (현재 턴이 아닌 사람이 승리) 이기 때문에 상근이 승리한다.
즉 돌이 5개 남았을 때 돌 1개를 가져가면 선공 승리이다.
(2) 돌 3개를 가져가면 -> 돌이 2개 남았을 때 상황이 된다.
돌 3개를 상근이가 가져가면, 돌이 2개 남았을 때엔 후공 승리 (현재 턴이 아닌 사람이 승리) 이기 때문에 상근이 승리한다.
즉 돌이 5개 남았을 때 돌 3개를 가져가면 선공 승리이다.
따라서 돌이 5개 남았을 때는 선공 승리이다.
돌이 6개 남았을 때 :
(1) 돌 1개를 가져가면 -> 돌이 5개 남았을 때 상황이 된다.
돌 1개를 상근이가 가져가면, 돌이 5개 남았을 때엔 선공 승리 (현재 턴인 사람이 승리) 이기 때문에 창영이 승리한다.
즉 돌이 6개 남았을 때 돌 1개를 가져가면 후공 승리이다.
(2) 돌 3개를 가져가면 -> 돌이 3개 남았을 때 상황이 된다.
돌 3개를 상근이가 가져가면, 돌이 3개 남아쓸 때엔 선공 승리 (현재 턴인 사람이 승리) 이기 때문에 창영이 승리한다.
즉 돌이 6개 나맜을 때 돌 3개를 가져가면 후공 승리이다.
따라서 돌이 6개 남았을 때는 후공 승리이다.
이러한 정리를 계속하다보면, 돌이 홀수 개 남았을 때는 선공 승리, 짝수 개 남았을 때는 후공 승리이다.
따라서, 돌이 홀수 개 남았다면 선공인 상근이가 승리하고, 짝수 개 남았다면 후공인 창영이가 승리한다.
C
#include <stdio.h>
int main(void) {
int n; scanf("%d", &n);
printf("%s", ((n % 2) ? "SK" : "CY"));
return 0;
}
Python
print('SK' if int(input()) % 2 else 'CY')
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 5598 : 카이사르 암호 ( BRONZE 2 ) / C, Python (0) | 2023.11.04 |
---|---|
[ BOJ ] 11586 : 지영 공주님의 마법 거울 ( BRONZE 3 ) / C, Python (0) | 2023.11.04 |
[ BOJ ] 2798 : 블랙잭 ( BRONZE 2 ) / C, Python (0) | 2023.11.03 |
[ BOJ ] 2566 : 최댓값 ( BRONZE 3 ) / C, Python (0) | 2023.11.03 |
[ BOJ ] 1956 : 운동 ( GOLD 4 ) / Python (0) | 2023.10.31 |