문제설명

 

소스코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main
{
	public static void main(String[] args) throws Exception 
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine());
		int xor = Integer.parseInt(st.nextToken());
		for (int i = 1; i < N; ++i) xor = xor ^ Integer.parseInt(st.nextToken()); // 기존 xor값과 새로 들어온 수의 XOR연산 값을 저장
		if(xor != 0) System.out.println("koosaga");
		else System.out.println("cubelover");
	}
}

 

설명

  • 돌 더미가 3개 있다고 가정하고, 각 돌 더미의 개수가 1, 2, 3 있다면
    1을 이진수로 변환하면 0001
    2를 이진수로 변환하면 0010
    3을 이진수로 변환하면 0011
  • 1, 2, 3의 이진수 값을 XOR한다.
    0001 XOR 0010 = 0011(= 1 XOR 2)
    0011 XOR 0011 = 0000(= 1 XOR 2 XOR 3)
  • 첫 시작은 koosaga이므로 각 돌더미의 개수 XOR 값이 0(이진수로 0000)이면 cubelover 승리하고, 0이 아니면 koosaga가 승리한다.

참고

https://librewiki.net/wiki/%ED%95%84%EC%8A%B9_%EC%A0%84%EB%9E%B5_%EA%B2%8C%EC%9E%84

 

필승 전략 게임

필승 전략 게임은 어느 한 쪽이 반드시 이길 수 있는 전략을 가진 게임을 말한다.

librewiki.net