본문 바로가기
컴퓨터공학 & 정보통신/알고리즘 문제 풀이

[LeetCode] 36. Valid Sudoku

by TaeGyeong Lee 2023. 3. 31.

접근

  • 스도쿠에 문제 풀이 방식을 알고 있으면 가볍게 풀 수 있을 것으로 보임
  • 문제 접근 방식은 매우 다양함. 논리를 세우고 방법이 나오지 않는다면 처음부터 다시 다른 방향으로 빠르게 바꾸는 것 또한 지혜인 듯 함
  • set 함수를 응용하여 코드를 간결화하는 것이 좋음

 

문제 링크

https://leetcode.com/problems/valid-sudoku/description/

 

솔루션

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        
        SUBSQ = [[[] for _ in range(3)] for _ in range(3)]

        # check ROWS
        for i in range(9):
            ROW = []
            for j in range(9):
                if board[i][j] != ".":
                    ROW.append(board[i][j])
                    SUBSQ[i//3][j//3].append(board[i][j])
            
            if len(ROW) != len(set(ROW)):
                return False
        
        # check COLS
        for i in range(9):
            COL = []
            for j in range(9):
                if board[j][i] != ".":
                    COL.append(board[j][i])
                    if board[j][i] not in SUBSQ[j//3][i//3]:
                        SUBSQ[j//3][i//3].append(board[j][i])

            if len(COL) != len(set(COL)):
                return False
        
        # check SUBSQUARES
        for i in range(3):
            for j in range(3):
                if len(SUBSQ[i][j]) != len(set(SUBSQ[i][j])):
                    return False

        return True