LeetCode/Top Interview 150

36. Valid Sudoku

hyunkookim 2024. 11. 30. 16:09

36. Valid Sudoku

 

https://youtu.be/TjFXEUCMqI8?si=mfzpl_jlRUHMsnOR

 

from typing import List
import collections

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        # 각 열에 있는 숫자를 추적하기 위한 딕셔너리 (기본값은 set)
        cols = collections.defaultdict(set)
        # 각 행에 있는 숫자를 추적하기 위한 딕셔너리 (기본값은 set)
        rows = collections.defaultdict(set)
        # 각 3x3 서브그리드에 있는 숫자를 추적하기 위한 딕셔너리 (기본값은 set)
        # key는 (r//3, c//3) 형태로, 서브그리드를 고유하게 식별
        squares = collections.defaultdict(set)
        
        # 보드의 모든 행(r)과 열(c)을 순회
        for r in range(9):
            for c in range(9):
                # 빈 칸('.')은 검사할 필요가 없으므로 건너뜀
                if board[r][c] == ".":
                    continue
                
                # 현재 숫자가 이미 같은 행, 열, 또는 3x3 서브그리드에 있는지 확인
                if (board[r][c] in rows[r] or 
                    board[r][c] in cols[c] or 
                    board[r][c] in squares[(r // 3, c // 3)]):
                    return False  # 규칙 위반 시 False 반환
                
                # 현재 숫자를 해당 행, 열, 서브그리드의 집합에 추가
                cols[c].add(board[r][c])
                rows[r].add(board[r][c])
                squares[(r // 3, c // 3)].add(board[r][c])
        
        # 모든 숫자가 규칙을 만족하면 True 반환
        return True

'LeetCode > Top Interview 150' 카테고리의 다른 글

48. Rotate Image  (0) 2024.11.30
54. Spiral Matrix  (0) 2024.11.30
76. Minimum Window Substring  (0) 2024.11.30
30. Substring with Concatenation of All Words  (0) 2024.11.29
3. Longest Substring Without Repeating Characters  (0) 2024.11.29