새소식

Computer Science/코딩테스트 문제 풀이

[예제] [파이썬] [탐색] 스토쿠 검사

  • -

스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9
개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다.
예를 들어 다음을 보자.

 

 

위 그림은 스도쿠를 정확하게 푼 경우이다. 각 행에 1부터 9까지의 숫자가 중복 없이 나오
고, 각 열에 1부터 9까지의 숫자가 중복 없이 나오고, 각 3×3짜리 사각형(9개이며, 위에서 색
깔로 표시되었다)에 1부터 9까지의 숫자가 중복 없이 나오기 때문이다.
완성된 9×9 크기의 수도쿠가 주어지면 정확하게 풀었으면 “YES", 잘 못 풀었으면 ”NO"를 출
력하는 프로그램을 작성하세요.

 

▣ 입력설명
첫 번째 줄에 완성된 9×9 스도쿠가 주어집니다.


▣ 출력설명
첫째 줄에 “YES" 또는 ”NO"를 출력하세요.

 

▣ 입력예제 1
1 4 3 6 2 8 5 7 9
5 7 2 1 3 9 4 6 8
9 8 6 7 5 4 2 3 1
3 9 1 5 4 2 7 8 6
4 6 8 9 1 7 3 5 2
7 2 5 8 6 3 9 1 4
2 3 7 4 8 1 6 9 5
6 1 9 2 7 5 8 4 3
8 5 4 3 9 6 1 2 7

▣ 출력예제 1
YES

 


 

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')
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.