import sys
# 입력 받기
board = []
for i in range(9):
board.append(list(map(int, sys.stdin.readline().rstrip().split())))
# 0의 개수는?
def zeros(board):
missing_num = 0
for line in board:
missing_num += line.count(0)
return missing_num
# 가로 채워보기
def fill_width(board):
for line in board:
missing_num = line.count(0)
if missing_num == 1:
answer = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for num in line:
if num != 0:
answer.remove(num)
idx = line.index(0)
line[idx] = answer[0]
# 세로 채워보기
def fill_vertical(board):
for i in range(9):
line = ([t[i] for t in board])
missing_num = line.count(0)
if missing_num == 1:
answer = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for num in line:
if num != 0:
answer.remove(num)
idx = line.index(0)
board[idx][i] = answer[0]
# 정사각형 채우기
def fill_square(board):
for i in range(0, 9, 3):
for j in range(0, 9, 3):
line = []
for k in range(3):
for r in range(3):
line.append(board[i+k][j+r])
#print(line)
missing_num = line.count(0)
if missing_num == 1:
answer = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for num in line:
if num != 0:
answer.remove(num)
idx = line.index(0)
board[i+(idx//3)][j+(idx % 3)] = answer[0]
# 전체 채워보기
while zeros(board) != 0:
fill_width(board)
fill_vertical(board)
fill_square(board)
# 출력
for i in board:
for j in i:
print(j, end=" ")
print()
시간 초과 이유 : 다시 생각해보면 너무 비효율적이다. 0인 것만 보면 되는데 쓸데없이 너무 많은 탐색을 한다.