문제
입력으로 미완성 9 X 9 스도쿠가 주어질때 다음 규칙을 만족하는지 판단하는 문제
풀이
간단한 구현 문제. 행/열/작은 사각형이 유효한지 판단하는 함수 사용. 각각의 함수는 1-9의 숫자가 중복되어있는지 판단한다. 각각의 unit을 unit함수를 이용. 판단하게 함으로써 중복된 코드를 줄인다.
'''
Created by jun on 21/05/01
참고 : https://leetcode.com/problems/valid-sudoku/discuss/15451/A-readable-Python-solution
'''
class Solution:
def is_column_valid(self, board):
for column in zip(*board): #board를 unpacking하고 다시 zip하게 되면 column단위로 묶이게 된다.
if not self.is_unit_valid(column):
return False
return True
def is_row_valid(self, board):
for row in board:
if not self.is_unit_valid(row):
return False
return True
def is_square_valid(self, board):
for i in (0,3,6):
for j in (0,3,6):
square = [board[y][x] for x in range(j,j+3) for y in range(i,i+3)]
if not self.is_unit_valid(square):
return False
return True
def is_unit_valid(self, unit): # 중복 체크함수
unit = [i for i in unit if i != '.']
return len(set(unit)) == len(unit) #중복 체크 팁
def isValidSudoku(self, board: List[List[str]]) -> bool:
return (self.is_column_valid(board) and
self.is_row_valid(board) and
self.is_square_valid(board))
새로 알게된 사실
zip 함수
* (Asterisk)
get 함수
get(key, 해당 key값이 없을때 반환하는 값)
중복 여부 체크
len(set(unit)) == len(unit)