ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 36. Valid Sudoku
    Leetcode 2024. 4. 13. 16:47

    Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:

    Each row must contain the digits 1-9 without repetition.
    Each column must contain the digits 1-9 without repetition.
    Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition.
    Note:

    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:

    Input: board = 
    [["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.
     

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

     

    class Solution:
        def isValidSudoku(self, board: List[List[str]]) -> bool:
    
            def check_row_and_col(r, c, n):
                for i in range(9):
                    if (board[r][i] == n and i != c) or (board[i][c] == n and i != r):
                        return False
    
                # check rect
                start_row = (r // 3) * 3
                start_col = (c // 3) * 3
                for i in range(start_row, start_row + 3):
                    for j in range(start_col, start_col + 3):
                        if board[i][j] == n and (i != r or j != c):
                            return False
                return True
            
            for i in range(9):
                for j in range(9):
                    if board[i][j] != ".":
                        if not check_row_and_col(i, j, board[i][j]):
                            return False
            return True

     

    스도쿠를 채우는 문제가 아니라

    이 스도쿠가 유효한지, 무효한지만 검사하면 되는 문제

     

    discussion을 보니

    비교해야하는 인덱스 값이 현재 체크하는 인덱스값과 동일한지를 체크해야 하는 부분을

    놓치는 부분이 많은 것 같다.

    나도 놓쳐서 애먹었다 ㅋㅋ..

     

    'Leetcode' 카테고리의 다른 글

    35. Search Insert Position  (0) 2024.04.13
    30. Substring with Concatenation of All Words  (0) 2021.06.21
    31. Next Permutation  (0) 2021.06.16
    29. Divide Two Integers  (0) 2021.05.25
    28. Implement strStr()  (0) 2021.05.25
Designed by Tistory.