DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

비숍과 나이트

문제로 돌아가기

해설

킹이 있는 칸을 (r,c)(r,c)(r,c)라고 하자. 위쪽 또는 아래쪽 변까지의 거리 중 작은 값을 xxx, 왼쪽 또는 오른쪽 변까지의 거리 중 작은 값을 yyy라고 정의한다. 두 값을 각각 333에서 잘라낸 뒤 x≤yx\le yx≤y가 되도록 정렬한다.

킹의 현재 칸과 이동 가능한 칸은 킹을 중심으로 한 3×33\times33×3 영역에만 존재한다. 이 영역의 칸을 공격하거나, 영역 안에 배치된 기물을 다른 기물로 보호하려면 킹에서 체비쇼프 거리 333보다 멀리 떨어진 나이트는 필요하지 않다. 비숍도 같은 대각선 위에서 더 가까운 위치로 옮겨 동일한 역할을 하도록 정규화할 수 있다. 따라서 경계까지의 거리가 333 이상인 경우는 모두 동일하게 취급할 수 있다.

가능한 위치 유형은 다음 열 가지뿐이다.

(0,0),(0,1),(0,2),(0,3),(1,1),(1,2),(1,3),(2,2),(2,3),(3,3)(0,0),(0,1),(0,2),(0,3),(1,1),(1,2),(1,3),(2,2),(2,3),(3,3)(0,0),(0,1),(0,2

각 유형에서 킹 주변의 유한한 영역만 조사하면 된다. 킹의 현재 칸과 이동 가능한 각 칸을 목표 칸으로 두고, 그 칸에 기물이 있다면 해당 기물을 제거한 상태에서 다른 기물이 목표 칸을 공격하는지 검사한다. 나이트의 공격은 곧바로 계산할 수 있고, 비숍은 목표 칸과 비숍 사이에 다른 기물이 없는지 확인한다.

S=4,5,6S=4,5,6S=4,5,6에서는 실제 체스판 전체를, S≥7S\ge7S≥7에서는 각 유형을 대표하는 7×77\times77×7 판을 완전 탐색한다. 각 비숍 수에 대해 필요한 나이트 수의 최솟값을 구하면 다음 표를 얻는다. 표의 값 이하가 아니라, 주어진 나이트 수가 표의 값 이상일 때 가능하다. B≥5인 열은 모두 이다.

유형

B=0B=0B=0

B=1B=1B=1

B=2B=2B=2

S=2S=2S=2에서는 어떤 위치도 불가능하다. S=3S=3S=3은 별도로 완전 탐색하며 다음 표를 사용한다. ∞\infty∞는 불가능함을 뜻한다.

유형

B=0B=0B=0

B=1B=1B=1

B=2B=2B=2

이제 각 유형에 속하는 칸의 수를 센다. 한 좌표축에서 가장 가까운 경계까지의 거리를 ddd라고 할 때, 거리를 333에서 자른 값이 ddd인 좌표의 개수를 CdC_dCd​라고 하자.

d=0,1,2d=0,1,2에 대해서는 다음과 같다.

)
,
(
0
,
3
)
,
(
1
,
1
)
,
(
1
,
2
)
,
(
1
,
3
)
,
(
2
,
2
)
,
(
2
,
3
)
,
(
3
,
3
)
B\ge5
B≥5
000

B=3B=3B=3

B=4B=4B=4

B≥5B\ge5B≥5

(0,0)(0,0)(0,0)

333

222

111

000

000

000

(0,1),(0,2),(0,3)(0,1),(0,2),(0,3)(0,1),(0,2),(0,3)

444

33

(1,1)(1,1)(1,1)

555

444

333

나머지 유형

555

444

222

111

00

B=3B=3B=3

B=4B=4B=4

B=5B=5B=5

B≥6B\ge6B≥6

(0,0)(0,0)(0,0)

∞\infty∞

222

111

000

000

000

000

(0,1)(0,1)(0,1)

∞\infty∞

333

222

(1,1)(1,1)(1,1)

∞\infty∞

444

444

d
=
0,1,2
Cd={2(S≥2d+2),1(S=2d+1),0(S≤2d).C_d=\begin{cases} 2 & (S\ge2d+2),\\ 1 & (S=2d+1),\\ 0 & (S\le2d). \end{cases}Cd​=⎩⎨⎧​210​(S≥2d+2),(S=2d+1),(S≤2d).​

그리고

C3=max⁡(0,S−6)C_3=\max(0,S-6)C3​=max(0,S−6)

이다.

유형 (a,b)(a,b)(a,b)에 속하는 칸의 수는 a=ba=ba=b이면 CaCbC_aC_bCa​Cb​, a<ba<ba<b이면 행과 열을 바꾸는 두 경우를 고려하여 2CaCb2C_aC_b2Ca​Cb​이다. 가능한 유형의 칸 수만 모두 더하면 정답이다.

완전 탐색으로 얻은 표는 각 유형과 정확한 기물 수에 대한 필요충분조건을 기록한다. 거리 분류에 의해 같은 유형의 칸은 동일한 국소 배치를 가지므로 같은 판정 결과를 갖는다. 마지막으로 위의 계수 공식은 모든 칸을 중복 없이 열 가지 유형 중 하나에 배정한다. 따라서 알고리즘이 더한 값은 가능한 킹 위치의 수와 정확히 같다.

시간 복잡도는 O(1)O(1)O(1)이고, 공간 복잡도도 O(1)O(1)O(1)이다. 정답은 최대 S2S^2S2이므로 64비트 정수형을 사용해야 한다.

Solution written by GPT5.6

3

222

111

000

000

22
2

111

000

0

000

11
1

000

000

000

22
2

111

111

000