[Python] SW Expert Academy #1974 스도쿠 검증

이재원·2024년 3월 12일

Samsung SW Expert Academy

목록 보기
3/34

📚문제: #1974 스도쿠 검증(D2)

입력

1
7 3 6 4 2 9 5 8 1
5 8 9 1 6 7 3 2 4
2 1 4 5 8 3 6 9 7
8 4 7 9 3 6 1 5 2
1 5 3 8 4 2 9 7 6
9 6 2 7 5 1 8 4 3
4 2 1 3 9 8 7 6 5
3 9 5 6 7 4 2 1 8
6 7 8 2 1 5 4 3 9

출력

#1 1

전체 코드

# 1974. 스도쿠 검증

# 테스트 케이스 T
T = int(input())

# 스도쿠 검증 함수
def sudoku(array):
        
    # 모든 행을 살펴본다.
    for k in range(9):
        
        temp = list(set(array[k]))
        
        # 중복되는 요소가 있으면 False 리턴
        if len(temp) < 9:
            
            return False
    
    # 90도 회전 스도쿠
    array2 = [[0] * 9 for _ in range(9)]
    
    for i in range(9):
        
        for j in range(9):
            
            array2[i][j] = array[j][8-i]
            
    # 모든 열을 살펴본다.
    for k in range(9):
        
        temp = list(set(array2[k]))
        
        # 중복되는 요소가 있으면 False 리턴
        if len(temp) < 9:
            
            return False
        
    # 3 × 3 정사각형을 살펴본다.
    for i in range(0, 7, 3):
        
        for j in range(0, 7, 3):
            
            seq = []
            
            for m in range(i,i+3):
                
                for n in range(j,j+3):
                    
                    seq.append(array[m][n])
            
            temp = list(set(seq))
            
            if len(temp) < 9:
                
                return False
    
    return True
    
# 각 테스트 케이스가 주어진다.
for q in range(1, T+1):
    
    # 퍼즐 초기화
    puzzle = []
    
    for _ in range(9):
        
        puzzle.append(list(map(int, input().split())))

    # 스도쿠 검증
    ans = sudoku(puzzle)
    
    if ans:
        
        print("#{} 1".format(q))
        
    else:
        
        print("#{} 0".format(q))

0개의 댓글