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 |