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.