20210115 // 삼성 SW Expert 아카데미 // 1974

2021. 1. 15. 16:01Programming/SW Expert Academy

삼성 SW Expert 아카데미 1974번 "스도쿠 검증" 문제입니다.

TC = int(input())
 
def sudoku(lst):
    temp = [1,2,3,4,5,6,7,8,9]
    k = []
    for i in range(0, 9):
        k.extend(lst[i])
        k.sort()
        if k != temp:
            return False
        k.clear()
     
    for i in range(0, 9):
        k = [lst[0][i], lst[1][i], lst[2][i], lst[3][i], lst[4][i], lst[5][i], lst[6][i], lst[7][i], lst[8][i]]
        k.sort()
        if k != temp:
            return False
        k.clear()
         
        for i in range(0, 9, 3):
            for j in range(0, 9, 3):
                k.extend(lst[i][j:j+3])
                k.extend(lst[i+1][j:j+3])
                k.extend(lst[i+2][j:j+3])
                k.sort()
                if k != temp:
                    return False
                k.clear()
    return True
         
for tc in range(1, TC+1):
    arr = [list(map(int, input().split())) for _ in range(9)]
    if sudoku(arr):
        print("#%s"%tc, 1)
    else:
        print("#%s"%tc, 0)

스도쿠 검증문제이다. 스도쿠란 숫자 퍼즐로, 가로 9칸, 세로 9칸으로 이루어져 있는 표에 1부터 9까지의 숫자를 채워 넣는 퍼즐이다.

 

스도쿠

이를 검증하기 위해서는 가로, 세로, 그 다음 정사각형을 탐색하여 그 값들이 배열 [1,2,3,4,5,6,7,8,9]와 같으면 된다.

 

1~9까지 한 번씩만 쓰이므로 가로, 세로, 정사각형에 들어있는 숫자 9개를 정렬하여 [1,2,3,4,5,6,7,8,9]와 비교하면 된다.

 

가로, 세로, 정사각형을 하나하나씩 비교하면서 하나의 경우라도 다를 경우 False반환, 무사히 다 통과할 경우 True를 반환한다.