스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9 개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다음을 보자.
위 그림은 스도쿠를 정확하게 푼 경우이다. 각 행에 1부터 9까지의 숫자가 중복 없이 나오 고, 각 열에 1부터 9까지의 숫자가 중복 없이 나오고, 각 3×3짜리 사각형(9개이며, 위에서 색 깔로 표시되었다)에 1부터 9까지의 숫자가 중복 없이 나오기 때문이다. 완성된 9×9 크기의 수도쿠가 주어지면 정확하게 풀었으면 “YES", 잘 못 풀었으면 ”NO"를 출 력하는 프로그램을 작성하세요.
ch=[0]*10
[0,1,2,3,4,5,6,7,8,9]
[0,0,0,0,0,0,0,0,0,0] 테이블을 만든다.
ch[board[i][j]]=1 로 채운다.
sum(ch)==9가 되는지 확인한다.
행, 열, 그룹 체크리스트 테이블을 만든다
import sys
sys.stdin=open('input.txt','r')
def Check(board):
for i in range(9):
ch1=[0]*10 # 행 check list
ch2=[0]*10 # 열 check list
for j in range(9):
ch1[board[i][j]]=1 # 1을 채운다
ch2[board[j][i]]=1
if sum(ch1)!=9 or sum(ch2)!=9: # 수도쿠가 아님
return False # 한줄 한줄 보는데 한줄이 하나라도 1~9가 아니면
# 이제 3x3 그룹으로 확인해 보자
for i in range(3):
for j in range(3):
ch3=[0]*10
for k in range(3):
for s in range(3):
ch3[board[i*3+k][j*3+s]]=1
if sum(ch3)!=9:
False
return True
if __name__=="__main__":
board=[list(map(int, input().split())) for _ in range(9)]
if Check(board):
print('YES')
else:
print('NO')