less than 1 minute read

[no-alignment]

구현 방식

  • 백준 문제 분류에 “게임 이론” 아리는게 있길래 확인 해봤더니 이런게 있구나,, 신기하다.
  • 서로가 최대한 이기기 위해서 게임 규칙을 수행한다.
  • 이기게 하기 위해서는 다음과 같이 생각했다.
    • 돌 개수가 1 또는 3 개 이면 모두 가져가기
    • 돌 개수가 6 보다 작으면, 3개를 가져가면 이후에 상대방이 3개를 가져가게 되어버리면 지게되므로, 1개만 가져간다.

코드

  • 최종 코드는 아래와 같다.
void solution(int N)
{
	while (true)
	{
		N = getStone(N);
		if (N <= 0)
		{
			cout << "SK";
			return;
		}
		N = getStone(N);
		if (N <= 0)
		{
			cout << "CY";
			return;
		}
	}
}


int getStone(int remained)
{
	if (remained == 3 || remained == 1)
		return 0;
	if (remained <= 6)
		return remained - 1;
	else
		return remained - 3;
}