Post

BOJ_16884_나이트 게임 (Java)

BOJ_16884_나이트 게임 (Java)

[Gold III] 나이트 게임 - 16884

문제 링크

성능 요약

메모리: 14412 KB, 시간: 104 ms

분류

애드 혹, 게임 이론

제출 일자

2024년 11월 13일 20:50:05

문제 설명

나이트 게임은 크기가 N×N인 체스판 위에서 진행되는 게임이고, 나이트를 하나씩 턴을 번갈아가며 놓는 게임이다.

나이트는 이미 놓여져 있는 나이트가 공격할 수 있는 칸에 놓을 수 없다. 나이트를 (r, c)에 놓은 경우에는 (r-2, c+1), (r-1, c+2), (r+1, c+2), (r+2, c+1), (r+2, c-1), (r+1, c-2), (r-1, c-2), (r-2, c-1)이 공격할 수 있는 칸이다.

나이트를 놓을 수 있는 칸이 없는 사람이 게임을 지게 된다. 구사과와 큐브러버가 이 게임을 최적의 방법으로 플레이했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 구사과가 먼저 시작한다.

입력

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 100)가 주어진다. 둘째 줄부터 T개의 줄에 테스트 케이스가 한 줄에 하나씩 주어지며, 체스판의 크기 N(1 ≤ N ≤ 10,000)으로 이루어져 있다.

출력

각각의 테스트 케이스마다 게임을 이기는 사람을 출력한다. 구사과가 이기는 경우에는 "koosaga", 큐브러버가 이기는 경우에는 "cubelover"를 출력한다.

문제 풀이

점 대칭으로 패를 놓을 경우 후공이 항상 이길 수 있다. 보드의 크기가 짝수면 성립하지만 홀수일 경우 점대칭의 중심이 1+ n/2, 1 + n/2에 존재하므로 선공이 중점에 놓으면 후공이 선공으로 바뀌기 때문에 승리자가 반대가 된다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
 * Author: nowalex322, Kim HyeonJae
 */

import java.io.*;
import java.util.*;

public class Main {
	static BufferedReader br;
	static BufferedWriter bw;
	static StringTokenizer st;

	public static void main(String[] args) throws Exception {
		new Main().solution();
	}

	public void solution() throws Exception {
		br = new BufferedReader(new InputStreamReader(System.in));
		// br = new BufferedReader(new InputStreamReader(new FileInputStream("input.txt")));
		bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int T = Integer.parseInt(br.readLine());
		while(T --> 0) {
			bw.write(Integer.parseInt(br.readLine())%2==1?"koosaga\n" : "cubelover\n");
		}
		bw.flush();
		bw.close();
		br.close();
	}
}
This post is licensed under CC BY 4.0 by the author.