만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

CCTV 사각지대

면접 대비

시간 제한1초메모리 제한512 MB

요약
8x8 이하 격자에 최대 8대의 CCTV가 있고, 각 CCTV를 가능한 방향으로 회전시켜 벽에 가려지지 않는 감시 영역을 최대화했을 때 사각지대의 최솟값을 구한다.
난이도

보통10점 중 5점

유형
완전 탐색, 백트래킹, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

한 사무실을 1×1 크기의 정사각형 칸으로 나누면 세로 NN칸, 가로 MM칸의 직사각형이 된다. 이 사무실에는 CCTV가 설치되어 있고, CCTV의 종류는 다섯 가지다.

1번2번3번4번5번
1번 CCTV2번 CCTV3번 CCTV4번 CCTV5번 CCTV

1번 CCTV는 한 방향만 감시한다. 2번과 3번은 두 방향을 감시하는데, 2번은 두 방향이 서로 반대여야 하고 3번은 두 방향이 직각을 이뤄야 한다. 4번은 세 방향을, 5번은 네 방향을 감시한다.

CCTV는 감시하는 방향에 놓인 칸을 끝까지 감시한다. 사무실에는 벽이 있고, CCTV는 벽을 통과하지 못한다. 어떤 CCTV도 감시하지 못하는 칸을 사각지대라고 한다.

CCTV는 회전시킬 수 있다. 회전은 항상 90도 단위이며, 감시하는 방향은 가로 또는 세로여야 한다.

지도에서 0은 빈 칸, 6은 벽, 1부터 5까지의 숫자는 CCTV의 종류 번호다. 아래 지도를 보자.

0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 6 0
0 0 0 0 0 0

1번 CCTV가 보는 방향에 따라 감시받는 칸을 #로 표시하면 다음과 같다.

오른쪽을 볼 때:

0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 # 6 0
0 0 0 0 0 0

왼쪽을 볼 때:

0 0 0 0 0 0
0 0 0 0 0 0
# # 1 0 6 0
0 0 0 0 0 0

위쪽을 볼 때:

0 0 # 0 0 0
0 0 # 0 0 0
0 0 1 0 6 0
0 0 0 0 0 0

아래쪽을 볼 때:

0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 6 0
0 0 # 0 0 0

CCTV는 벽을 통과하지 못하므로, 1번이 오른쪽을 감시할 때 6의 오른쪽 칸은 감시받지 않는다.

다음 지도를 보자.

0 0 0 0 0 0
0 2 0 0 0 0
0 0 0 0 6 0
0 6 0 0 2 0
0 0 0 0 0 0
0 0 0 0 0 5

두 2번 CCTV의 방향을 정하는 네 가지 경우에 감시받는 칸은 아래와 같다.

왼쪽 위 2번이 가로, 오른쪽 아래 2번이 가로:

0 0 0 0 0 #
# 2 # # # #
0 0 0 0 6 #
0 6 # # 2 #
0 0 0 0 0 #
# # # # # 5

왼쪽 위 2번이 가로, 오른쪽 아래 2번이 세로:

0 0 0 0 0 #
# 2 # # # #
0 0 0 0 6 #
0 6 0 0 2 #
0 0 0 0 # #
# # # # # 5

왼쪽 위 2번이 세로, 오른쪽 아래 2번이 가로:

0 # 0 0 0 #
0 2 0 0 0 #
0 # 0 0 6 #
0 6 # # 2 #
0 0 0 0 0 #
# # # # # 5

왼쪽 위 2번이 세로, 오른쪽 아래 2번이 세로:

0 # 0 0 0 #
0 2 0 0 0 #
0 # 0 0 6 #
0 6 0 0 2 #
0 0 0 0 # #
# # # # # 5

CCTV는 다른 CCTV가 놓인 칸을 통과해서 그 너머까지 감시한다. 아래 지도를 보자.

0 0 2 0 3
0 6 0 0 0
0 0 6 6 0
0 0 0 0 0

2번이 세로를 감시하고 3번이 왼쪽과 아래쪽을 감시하면 감시받는 칸은 다음과 같다.

# # 2 # 3
0 6 # 0 #
0 0 6 6 #
0 0 0 0 #

사무실의 크기와 상태, 그리고 CCTV의 정보가 주어진다. CCTV의 방향을 적절히 정해서 사각지대의 최소 크기를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 사무실의 세로 크기 NN과 가로 크기 MM이 주어진다. (1≤N,M≤81 \le N, M \le 8)

둘째 줄부터 NN개의 줄에 사무실 각 칸의 정보가 주어진다. 0은 빈 칸, 6은 벽, 1부터 5까지의 숫자는 문제에서 설명한 종류의 CCTV다. 한 줄에 놓인 MM개의 값은 공백으로 구분된다.

CCTV의 개수는 8개를 넘지 않는다.

출력

첫째 줄에 사각지대의 최소 크기를 출력한다.

예제5

  1. 예제 1

    입력
    4 6
    0 0 0 0 0 0
    0 0 0 0 0 0
    0 0 1 0 6 0
    0 0 0 0 0 0
    
    예상 출력
    20
    
  2. 예제 2

    입력
    6 6
    0 0 0 0 0 0
    0 2 0 0 0 0
    0 0 0 0 6 0
    0 6 0 0 2 0
    0 0 0 0 0 0
    0 0 0 0 0 5
    
    예상 출력
    15
    
  3. 예제 3

    입력
    6 6
    1 0 0 0 0 0
    0 1 0 0 0 0
    0 0 1 0 0 0
    0 0 0 1 0 0
    0 0 0 0 1 0
    0 0 0 0 0 1
    
    예상 출력
    6
    
  4. 예제 4

    입력
    6 6
    1 0 0 0 0 0
    0 1 0 0 0 0
    0 0 1 5 0 0
    0 0 5 1 0 0
    0 0 0 0 1 0
    0 0 0 0 0 1
    
    예상 출력
    2
    
  5. 예제 5

    입력
    1 7
    0 1 2 3 4 5 6
    
    예상 출력
    0