돌 게임은 두 명이서 즐기는 재밌는 게임이다.
탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개 또는 3개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 이기게 된다.
두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 상근이가 먼저 시작한다.
첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1000)
상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
n = int(input())
def winner(n):
if n%2 == 0:
win = 'CY'
else:
win = 'SK'
return win
print(winner(n))
지난 이틀 동안 너무 어려운 문제가 나와서 마음이 꺾여 있었는데 갑자기 쉬운 문제를 접하니 허무하기도 하고 좀 마음 편하기도 하고 그렇다.
아무튼 이 문제는 상근이가 먼저 게임을 시작하기 때문에, 돌을 가져가는 총 횟수가 홀수이면 상근이가 이기고, 짝수이면 창영이가 이기는 구조이다. 따라서 돌의 개수를 1과 3의 조합으로 쪼개다 보면 누가 어떻게 이기는지 파악할 수 있는데, 놀랍게도 돌의 개수가 홀수이면 상근이가 이기고 짝수이면 창영이가 이기게 된다. 같은 n이어도 1과 3의 조합이 다양할 수 있는데 신기하게도 어떤 조합이든 간에 돌의 개수가 홀수이면 가져오는 총 횟수도 홀수가 되어서 상근이가 이기고, 돌의 개수가 홀수이면 가져오는 총 횟수도 짝수가 되어서 창영이가 이긴다.
정확한 수학적인 원리는 모르겠지만, 자연수를 1과 3의 조합으로 하면 이런 식으로 나누어 떨어지게 되는 듯하다. 그래서 별다른 알고리즘이나 복잡한 코드 구조 없이 단순히 입력 받은 수가 짝수이면 창영이를 반환하도록, 홀수이면 상근이를 반환하도록 했더니 정답을 받았다.