스도쿠

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

요약
9x9 스도쿠 보드에서 빈 칸을 채워 각 행, 열, 3x3 박스에 1부터 9까지 숫자가 정확히 한 번씩 들어가도록 백트래킹으로 완성하는 문제입니다.
난이도

보통10점 중 6점

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

문제

스도쿠는 9x9 칸으로 이루어진 퍼즐이다. 일부 칸에는 1부터 9까지의 숫자가 미리 적혀 있고, 나머지 빈 칸을 규칙에 맞게 채워야 한다.

빈 칸을 채우는 규칙은 다음과 같다.

  1. 각 가로줄에는 1부터 9까지의 숫자가 정확히 한 번씩 나타나야 한다.
  2. 각 세로줄에는 1부터 9까지의 숫자가 정확히 한 번씩 나타나야 한다.
  3. 굵은 선으로 나뉜 각 3x3 정사각형에도 1부터 9까지의 숫자가 정확히 한 번씩 나타나야 한다.

첫 번째 그림의 첫째 줄에는 1을 제외한 2부터 9까지의 숫자가 이미 있으므로, 첫째 줄의 빈 칸에는 1이 들어간다.

또 위쪽 가운데 3x3 정사각형에는 3을 제외한 숫자가 이미 있으므로, 가운데 빈 칸에는 3이 들어간다.

이렇게 모든 빈 칸을 채우면 다음과 같은 완성된 판을 얻을 수 있다.

게임 시작 전에 주어진 스도쿠 판을 규칙에 맞게 완성한 뒤 출력하는 프로그램을 작성하시오.

입력

아홉 줄에 스도쿠 판의 현재 상태가 주어진다. 각 줄에는 9개의 정수가 공백으로 구분되어 주어지며, 스도쿠 판의 한 줄을 나타낸다. 이미 채워진 칸은 1부터 9까지의 숫자로, 빈 칸은 0으로 주어진다. 규칙에 맞게 완성할 수 없는 입력은 주어지지 않는다.

출력

완성된 스도쿠 판을 아홉 줄에 출력한다. 각 줄에는 9개의 숫자를 공백으로 구분해 출력한다.

완성하는 방법이 여러 가지라면 그중 하나만 출력하면 된다.

제한

입력은 항상 규칙에 맞게 완성할 수 있는 스도쿠 판이다.

기준 실행 시간은 다음과 같다.

  • C++14: 80ms
  • Java: 292ms
  • PyPy3: 1172ms

예제1

  1. 예제 1

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