====== 님 게임 나누기 ====== ===== 풀이 ===== * 님 게임의 변형. [[ps:스프라그-그런디 정리]]를 이용해서 푼다. * 한개의 무더기에서 돌의 갯수에 따른 그런디 수를 구하는 것이 조금 복잡하다. 두 무더기로 나눴을때의 그런디수는, 두개의 그런디수를 xor한 값으로 계산할수 있고, 이렇게 두 무더기로 나누는 행동까지 포함한 그런디 수를 손으로 구해보면 1,2,4,3,5,6,8,7,...과 같은 패턴으로 나타나진다. 패턴대로 그런디수를 구한다면 돌 갯수 % 4 에 따라서 조건을 분리해주면 되긴 한다. 다만 손으로 해서 이런 패턴이 나오긴 했지만, 왜 이런 패턴이 나타나는지에 대한 설명은 모르겠다.. * 시간복잡도는 O(n) ===== 코드 ===== """Solution code for "BOJ 11872. 님 게임 나누기". - Problem link: https://www.acmicpc.net/problem/11872 - Solution link: http://www.teferi.net/ps/problems/boj/11872 Tags: [Sprague-Grundy] """ def main(): M = int(input()) # pylint: disable=unused-variable P = [int(x) for x in input().split()] grundy = 0 for p_i in P: match p_i % 4: case 0: grundy_i = p_i - 1 case 3: grundy_i = p_i + 1 case _: grundy_i = p_i grundy ^= grundy_i print('koosaga' if grundy else 'cubelover') if __name__ == '__main__': main() {{tag>BOJ ps:problems:boj:플래티넘_3}}