라이트 업

시간 제한2초메모리 제한256 MB

요약
N×N 라이트 업 판의 흰 칸에 전구를 놓아 모든 흰 칸이 빛나게 하고 숫자가 적힌 검은 칸마다 인접 전구 개수를 맞추며, 사전순으로 가장 작은 배치를 찾는다.
난이도

보통10점 중 7점

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

문제

라이트 업은 격자판에 백열 전구를 놓는 퍼즐이다. N×NN \times N 격자판의 각 칸은 검은색 정사각형이거나 흰색 정사각형이다. 목표는 흰색 정사각형 몇 곳에 백열 전구를 놓아 모든 흰색 정사각형에 불이 들어오게 하는 것이다.

어떤 흰색 정사각형과 같은 가로줄 또는 같은 세로줄에 백열 전구가 있고 그 사이에 검은색 정사각형이 하나도 없으면, 그 흰색 정사각형에 불이 들어온다. 전구를 놓은 칸도 불이 들어온 칸이다. 전구는 흰색 정사각형에만 놓을 수 있다.

그림 1

그림 1

그림 1의 격자판에서 (3, 3)에 전구를 놓으면 그림 2와 같은 상황이 된다.

그림 2

그림 2

이미 불이 들어온 흰색 정사각형에 전구를 놓으면 전구가 과열되므로 그런 배치는 할 수 없다. 즉 그림 3처럼 (2, 3)과 (3, 3)에 전구를 함께 놓는 것은 불가능하다.

그림 3

그림 3

숫자가 적힌 검은색 정사각형도 있다. 이 숫자는 그 정사각형과 변을 맞댄 칸 가운데 전구가 놓여야 하는 칸의 개수다. 그림 4의 판을 보자.

그림 4

그림 4

그림 5는 그림 4의 판에서 규칙을 모두 만족하는 배치 하나다.

그림 5

그림 5

격자판이 주어지면 퍼즐을 푸는 배치를 찾아라.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. (1≤T≤301 \le T \le 30)

각 테스트 케이스의 첫 줄에 격자판의 크기 NN이 주어진다. (1≤N≤71 \le N \le 7)

이어지는 NN개의 줄에 각각 NN개의 정수가 공백으로 구분되어 주어진다. ii번째 줄의 jj번째 정수는 (i,j)(i, j) 칸의 정보 RijR_{ij}다. RijR_{ij}가 −2-2이면 흰색 정사각형, −1-1이면 숫자가 없는 검은색 정사각형, 00 이상 44 이하이면 그 숫자가 적힌 검은색 정사각형이다.

출력

각 테스트 케이스마다 NN개의 줄에 걸쳐 00 또는 11인 정수 NN개를 공백으로 구분해 출력한다. 전구를 놓은 칸은 11, 놓지 않은 칸은 00이다. 테스트 케이스의 답은 입력에 주어진 순서대로 이어서 출력한다.

답이 항상 존재하는 입력만 주어진다. 규칙을 만족하는 배치가 여럿이면 그중 사전순으로 가장 작은 배치 하나만 출력한다. 배치를 첫 줄부터 마지막 줄까지, 각 줄에서는 왼쪽부터 오른쪽으로 읽어 길이 N×NN \times N인 00과 11의 수열로 보고, 이 수열이 사전순으로 가장 작은 배치가 답이다. 다시 말해 이 순서로 칸을 하나씩 볼 때, 그 칸에 00을 놓고도 나머지 칸을 채워 퍼즐을 풀 수 있으면 그 칸은 00이다.

예제5

  1. 예제 1

    입력
    2
    7
    -2 -2 -2 -2 -2 0 -2
    1 -2 -2 -2 -2 -2 -2
    -2 -2 1 -2 2 -2 -2
    -2 -2 -2 -2 -2 -2 -2
    -2 -2 0 -2 2 -2 -2
    -2 -2 -2 -2 -2 -2 2
    -2 1 -2 -2 -2 -2 -2
    7
    -2 -2 -1 -2 -2 -1 -2
    3 -2 -2 -2 -2 -2 -2
    -2 -2 -2 2 -2 -2 -1
    -2 -2 -1 -2 3 -2 -2
    -1 -2 -2 3 -2 -2 -2
    -2 -2 -2 -2 -2 -2 -1
    -2 2 -2 -2 0 -2 -2
    
    예상 출력
    1 0 0 0 0 0 0
    0 0 0 1 0 0 0
    0 1 0 0 0 1 0
    0 0 0 0 1 0 0
    0 0 0 0 0 0 1
    0 0 0 0 1 0 0
    1 0 0 0 0 0 1
    1 0 0 1 0 0 1
    0 1 0 0 0 0 0
    1 0 0 0 1 0 0
    0 0 0 1 0 0 1
    0 0 0 0 1 0 0
    0 0 0 1 0 0 0
    1 0 1 0 0 0 1
    
  2. 예제 2

    입력
    3
    1
    -2
    1
    -1
    1
    0
    
    예상 출력
    1
    0
    0
    
  3. 예제 3

    입력
    1
    7
    -2 -2 -2 -2 -2 -2 -2
    -2 -2 -2 -2 -2 -2 -2
    -2 -2 -2 -2 -2 -2 -2
    -2 -2 -2 -2 -2 -2 -2
    -2 -2 -2 -2 -2 -2 -2
    -2 -2 -2 -2 -2 -2 -2
    -2 -2 -2 -2 -2 -2 -2
    
    예상 출력
    0 0 0 0 0 0 1
    0 0 0 0 0 1 0
    0 0 0 0 1 0 0
    0 0 0 1 0 0 0
    0 0 1 0 0 0 0
    0 1 0 0 0 0 0
    1 0 0 0 0 0 0
    
  4. 예제 4

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

    입력
    1
    7
    -2 -2 -2 -2 -2 -2 -2
    -1 -1 -1 -1 -1 -1 -1
    -2 -2 -2 -2 -2 -2 -2
    -1 -1 -1 -1 -1 -1 -1
    -2 -2 -2 -2 -2 -2 -2
    -1 -1 -1 -1 -1 -1 -1
    -2 -2 -2 -2 -2 -2 -2
    
    예상 출력
    0 0 0 0 0 0 1
    0 0 0 0 0 0 0
    0 0 0 0 0 0 1
    0 0 0 0 0 0 0
    0 0 0 0 0 0 1
    0 0 0 0 0 0 0
    0 0 0 0 0 0 1