Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:
Note:
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
for i in range(0, len(board)):
for j in range(0, len(board)):
row = board[i][:j] + board[i][j+1:]
if board[i][j] != '.':
if board[i][j] in row:
return False
return True
여기서 col, box 를 정해줘서 계산하려했는데 범위 잡기가 어렵고 리스트에 값을 넣기가 별로임
루션아~~ 솔루션아~~
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
rows = [{} for i in range(9)]
columns = [{} for i in range(9)]
boxes = [{} for i in range(9)]
for i in range(0, len(board)):
for j in range(0, len(board)):
num = board[i][j]
if num != '.':
num = int(num)
box_index = (i // 3 ) * 3 + j // 3
# keep the current cell value
rows[i][num] = rows[i].get(num, 0) + 1
columns[j][num] = columns[j].get(num, 0) + 1
boxes[box_index][num] = boxes[box_index].get(num, 0) + 1
# check if this value has been already seen before
if rows[i][num] > 1 or columns[j][num] > 1 or boxes[box_index][num] > 1:
return False
return True
rows, columns, boxed 를 9 크기의 딕셔너리로 만들어줌
num 이 '.' 이 아닐때만, num 을 int 형으로 바꿔주고
box_index 를 설정해준다
rows, columns, boxes 의 num 위치의 값을 get 해와서 +1 해줌
rows, columns, boxes 에서 num 은 오직 1개만 있어야 하므로 1을 초과하면 False
이거도 뭔가 외워야할듯..