Algorithm/SW Expert Academy

[Python] 1974. 스도쿠 검증

느낌표 공장장 2021. 9. 16. 23:42
for idx in range(1, t+1):
    # 스도쿠 판 받아와서 만들기
    board = []
    for _ in range(9):
        board.append(list(map(int, input().split())))

    answer = 1

    # 3 * 3 작은 격자 9개 만들기
    square = [[[] for _ in range(3)] for _ in range(3)]
    for i in range(9):
        garo = []   # 가로 줄
        sero = []   # 세로 줄
        for j in range(9):
            # 만약 검토하려는 숫자가 이미 가로 또는 세로 도는 작은 격자 안에 있다면 0. 바로 중단
            if (board[i][j] in garo) or (board[j][i] in sero) or (board[i][j] in square[i//3][j//3]):
                answer = 0
                break

            # 검토할 숫자가 가로 또는 세로 또는 작은 격자에 없다면 (겹치는게 아니라면) 추가
            garo.append(board[i][j])
            sero.append(board[j][i])
            square[i//3][j//3].append(board[i][j])

        # 이미 겹치는 숫자가 있었다면 중단
        if not answer:
            break

    print('#{} {}'.format(idx, answer))