9x9 스도쿠 보드가 하나 있다고 가정합니다. 그것이 유효한지 지금 확인해야 합니다. 채워진 셀만 다음 규칙에 따라 검증해야 합니다 -
- 각 행은 반복 없이 1-9 사이의 숫자를 포함해야 합니다.
- 각 열은 반복 없이 1-9의 숫자를 포함해야 합니다.
- 그리드의 각 9(3x3) 하위 상자에는 1-9 사이의 숫자가 반복 없이 포함되어야 합니다.
스도쿠 그리드가 다음과 같다고 가정합니다 -
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 |
유효합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 0에서 8 사이의 i에 대해
- row, col 및 block, row_cube :=3 * (i / 3) 및 col_cube :=3 * (i mod 3)이라는 빈 사전을 만듭니다.
- 0에서 8 사이의 j에 대해
- 보드[i, j]가 공백이 아니고 보드[i, j]가 행에 있으면 false를 반환합니다.
- 행[보드[i, j]] :=1
- 보드[j, i]가 공백이 아니고 보드[j, i]가 col에 있으면 false를 반환합니다.
- 열[보드[j, i]] :=1
- rc :=row_cube + j/3 및 cc :=col_cube + j mod 3
- 블록의 보드[rc, cc]와 보드[rc, cc]가 비어 있지 않으면 false를 반환합니다.
- 차단[보드[rc, cc]] :=1
- 참을 반환
예제(파이썬)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
class Solution(object):def isValidSudoku(self, board):""" :type board:List[List[str]] :rtype:bool """ for i in range(9):row ={} column ={} 블록 ={} row_cube =3 * (i//3) column_cube =3 * (i%3) for j in range(9):if board[i][j]!='.' 행의 보드[i][j]:보드[j][i]!='이면 False 행[board[i][j]] =1을 반환합니다.' 열의 보드[j][i]:False 열 반환[board[j][i]] =1 rc=row_cube+j//3 cc =column_cube + j%3 if board[rc][cc] in block and board[rc][cc]!='.':False 블록 반환[board[rc][cc]]=1 return Trueob1 =Solution()print(ob1.isValidSudoku([ ["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"]]))
입력
<미리>[["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"]]출력
사실