티스토리 뷰

Problem Solving

boj 1799 : 비숍

1ssrek 2025. 3. 10. 23:42

 

boj 1799 : 비숍

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

 

 

기본적인 DFS + 커팅 방법을 사용하여 해결할 수 있다.

백준 9663번 N-Queen와 유사하다.

 

0. DFS + 커팅방법

지정한 y, x에 놓을 수 있는지 판단하기 위해 (y-1,x-1), (y-2,x-2) ... 를 모두 확인하면 판단을 위해 O(N)의 복잡도가 추가로 소모된다. 판단은 O(1)로 끝내야 한다. true나 false를 담은 check배열을 이용하여 한 번의 접근으로 말을 놓을 수 있는지 판단하도록 모델링해야 한다.

 

이후, DFS + 커팅 방법을 보완하기 위해 크게 2가지 기법을 추가로 사용하였다.

1. 좌표변환

위와 같이 좌표 변환을 끝내 놓으면, N-Queens문제보다 더 쉬운 N-Rooks 문제로 바뀌게 된다.

좌표변환에는 (y', x') = (y+x, n-1-y+x) 와 같은 적당한 변환식을 이용한다.

구현 편의상 좌표변환을 하였으나, 변환하지않고 Diagonal Check배열을 만드는 방법도 있다.

2. 흑백분리

체스판을 곰곰히 살펴보면, 흑색 발판에 놓인 비숍은 백색 발판에 놓인 말을 절대 잡을 수 없다.

즉, DFS수행시 흑색발판 따로, 백색발판 따로 DFS를 수행해서 합치면 된다는 것을 의미한다.

시간복잡도가 N^N에 달하여 시간초과 나던 것을 (N/2)^(N/2) 수준으로 줄여 시간초과를 해소할 수 있다.

'Problem Solving' 카테고리의 다른 글

boj 1647 : 도시 분할 계획  (0) 2025.03.11
boj 16153 비트와 가희  (0) 2022.09.16
boj 11001: 김치  (0) 2022.05.14
boj 20193: 화려한 정사각형  (0) 2022.04.18
boj 1214 : 쿨한 물건 구매  (0) 2021.06.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
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
30 31
글 보관함