36. Valid Sudoku

LONGNEW·2023년 7월 26일
0

CP

목록 보기
133/155

https://leetcode.com/problems/valid-sudoku/?envType=featured-list&envId=top-google-questions

input :

  • board

output :

  • 현재 주어진 스도쿠 판이 규칙에 적절한지를 판별하여 True, False를 반환

조건 :


Solution explain : Solution1

idea

  • 주어진 조건대로 반복문을 돌면서 확인한다

주의

  • numpy를 쓰지 않으면 3 * 3 행렬로 구분하기 위해선 변위를 통해 값을 계산하거나, 반복문을 통해 슬라이싱을 구현해야 한다.
class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
    	# 행을 기준으로 적절한지 확인
        for row in range(len(board)):
            temp = {j:0 for j in range(1, 10)}
            data = board[row]

            for item in data:
                if item == ".":
                    continue

                val = int(item)
                if temp[val] != 0:
                    return False
                temp[val] += 1


        for col in range(len(board)):
        # 열을 기준으로 적절한지 확인
            temp = {j:0 for j in range(1, 10)}

            for row in range(len(board)):
                item = board[row][col]
                if item == ".":
                    continue
                    
                val = int(item)
                if temp[val] != 0:
                    return False
                temp[val] += 1
        
        # 3 * 3으로 분리해서 보았을 때 적절한지 확인.
        for x in [0, 3, 6]:
            for y in [0, 3, 6]:
                used = {j:0 for j in range(1, 10)}

                for dx in range(3):
                    for dy in range(3):
                        item = board[x + dx][y + dy]
                        if item == ".":
                            continue
                        
                        val = int(item)
                        if used[val] != 0:
                            return False
                        used[val] += 1

        return True

0개의 댓글