[leetcode] 36. Valid Sudoku

섬섬's 개발일지·2022년 1월 29일
0

leetcode

목록 보기
22/23

36. Valid Sudoku

Problem

Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:
1. Each row must contain the digits 1-9 without repetition.
2. Each column must contain the digits 1-9 without repetition.
3. Each of the nine 3x3 sub-boxes of the grid must contain the digits 1-9 without repetition.

Nots:

  • A Sudoku board(partially filled) could be valid but is not necessarily solvable.
  • Only the filled cells need to be validated according to the mentioned rules.

Example 1:

Input: board =
[["5","3",".",".","7",".",".",".","."]
,["6",".",".","1","9","5",".",".","."]
,[".","9","8",".",".",".",".","6","."]
,["8",".",".",".","6",".",".",".","3"]
,["4",".",".","8",".","3",".",".","1"]
,["7",".",".",".","2",".",".",".","6"]
,[".","6",".",".",".",".","2","8","."]
,[".",".",".","4","1","9",".",".","5"]
,[".",".",".",".","8",".",".","7","9"]]
Output: true

Example 2:

[["8","3",".",".","7",".",".",".","."]
,["6",".",".","1","9","5",".",".","."]
,[".","9","8",".",".",".",".","6","."]
,["8",".",".",".","6",".",".",".","3"]
,["4",".",".","8",".","3",".",".","1"]
,["7",".",".",".","2",".",".",".","6"]
,[".","6",".",".",".",".","2","8","."]
,[".",".",".","4","1","9",".",".","5"]
,[".",".",".",".","8",".",".","7","9"]]
Output: false
Explanation: Same as Example 1, except with the 5 in the top left corner being modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid.

012345678
83..7....
6..195...
.98....6.
8...6...3
4..8.3..1
7...2...6
.6....28.
...419..5
....8..79

Constraints:

  • board.length == 9
  • `board[i].length == 9'
  • board[i][j] is a digit 1-9 or ..

코드

class Solution(object):
    def isValidSudoku(self, board):
        """
        :type board: List[List[str]]
        :rtype: bool
        """
        
        # 가로
        for i in range(9) :
            test = set()
            for j in board[i] :
                if j != '.' :
                    if int(j) in test : return False
                    test.add(int(j))
                    
        # 세로
        for i in range(9) :
            test = set()
            for j in range(9) :
                if board[j][i] != '.' :
                    if int(board[j][i]) in test : return False
                    test.add(int(board[j][i]))
                    
        # 한칸
        for i in range(3) :
            for j in range(3) :
                row = i * 3 # 행
                column = j * 3 # 열
                test = set()
                for z in range(3) :
                    for k in range(3) :
                        num = board[row+z][column+k]
                        if num != '.' :
                            if int(num) in test :
                                return False
                            test.add(int(num))
        
        return True
profile
섬나라 개발자

0개의 댓글