
각 위치에서 가로, 세로에 1~9 값이 중복되지 않고 있는것을 확인하고, 9개의 정사각형 가장 왼쪽 모서리에서는 정사각형에서 1~9 값이 중복되지 않고 있는것을 확인해야한다.
이중 for문으로 현재 위치에서 행, 열에 대해 값이 사용되었는지를 체크하기 위한 rows, cols를 만들자.
각 위치에 있는 숫자가 이미 사용되었다면 바로 return을 해주면 된다.
그게 아니라면 숫자가 사용되었음을 rows, cols에 표시해주자.
그리고 정사각형 부분도 체크해야하니 i % 3 == 0 and j % 3 == 0 조건을 사용해서 정사각형의 왼쪽 모서리를 찾고, for문으로 위와 같은 매커니즘으로 체크해주면 된다.
T = int(input())
def check_sudoku(Mat):
for i in range(9):
rows, cols = [0] * 10, [0] * 10
for j in range(9):
# 가로 세로 체크하자
r = Mat[i][j]
c = Mat[j][i]
# 숫자가 이미 사용되었다면 바로 0 리턴
if rows[r] or cols[c]:
return 0
else:
rows[r], cols[c] = 1, 1
# 3*3 네모 부분 체크
if i % 3 == 0 and j % 3 == 0:
square = [0] * 10
for x in range(i, i+3):
for y in range(j, j+3):
tmp = Mat[x][y]
if square[tmp]:
return 0
square[tmp] = 1
return 1
for tc in range(1, T+1):
puzzles = [list(map(int, input().split())) for _ in range(9)]
result = check_sudoku(puzzles)
print(f'#{tc} {result}')
