Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Nov 11, 2025

🧷 문제 링크

https://www.acmicpc.net/problem/16897

🧭 풀이 시간

30분

👀 체감 난이도

✏️ 문제 설명

N*M 크기의 체스판 위 (1,1) 지점에 말이 하나 놓여 있다.
말은 한 번의 이동에서 오른쪽으로 한 칸, 아래로 한 칸, 오른쪽 아래 방향으로 K칸 이동할 수 있다.
두 사람이 번갈아가며 말을 이동시키며, 말을 더 이상 이동시킬 수 없는 사람이 진다.
누가 이기는지 구해보자.

🔍 풀이 방법

어떤 칸이 (N, M)으로부터 떨어진 행, 열의 수를 각각 x, y라 하고, 이 상태에서 선공이 이기는지 여부를 g[x][y]라 둔다.
g[x][y] = 1이면 선공 승, 0이면 후공 승이다.

K = 1일 때는 반드시 g[x][y] = (x&1) | (y&1) 이다.
따라서 K = 1이 아닐 때만 생각한다.

z = min(x,y) / (K+1)로 두면, g[x][y] = g[x-z(K+1)][y-z(K+1)] 이다.

이제 두 가지 경우로 나뉜다.

  1. x < K 혹은 y < K인 경우
  • g[x][y] = (x&1)^(y&1)^(z&1)
  1. 아닌 경우
  • g[x][y] = 1

g[x][y]가 0이면 후공이 승리하고, 0이 아니면 선공이 승리한다.

⏳ 회고

ez

@oncsr oncsr self-assigned this Nov 11, 2025
@oncsr oncsr added the success 👍 해설을 보지 않고 풀었을 때 label Nov 11, 2025
@ShinHeeEul ShinHeeEul merged commit 37bab41 into main Nov 11, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants