본문 바로가기

백준/C++

[Baekjoon/C++] 9656번 - 돌 게임 2

[백준] Baekjoon Online Judge

문제로 이동

 

문제

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

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

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

 

입력

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

 

출력

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

 


예제 입력 예제 출력
4 SK

풀이

#include <iostream>
using namespace std;

int main() {
	int N; // 돌 N개
	scanf("%d", &N);

	int turn = N / 3 + N % 3;

	// 상근이가 이기면 SK를, 창영이가 이기면 CY을 출력
	if (turn % 2 == 0)
		printf("SK\n");
	else
		printf("CY\n");

	return 0;
}

일단 상근이와 창영이가 승부를 결정 지을 수 있는 턴 이전에는 각 사람이 돌을 몇개 가져가는지는 중요하지 않다. 그러므로 3개씩 가져간다고 가정하고 turn에 N / 3을 더했다. 이러고 나면 돌은 1개 혹은 2개가 남는 경우가 생기는데, 이 돌의 수만큼 턴이 증가한다. 그러므로 둘의 게임이 끝났을 때의 턴의 수는 N / 3 + N % 3이다.

 

그리고 이렇게 구한 turn이 홀수인지 짝수인지에 따라 상근이와 창영이의 우승이 결정되고, 이를 출력하면 된다.