SWEA 1974. 스도쿠 검증(파이썬)

비만다람쥐·2024년 5월 17일
0
post-custom-banner

문제

문제바로가기

1.스도쿠는 숫자퍼즐로 가로9칸 세로 9칸으로 이루어져 있는 표에 1부터 9까지의 숫자를 채워넣는 퍼즐이다
2.같은 줄에 1에서 9까지의 숫자를 한번씩만 넣고, 3*3 크기의 작은 격자 또한 1에서 9까지의 숫자가 겹치지 않아야한다

접근하기

  1. 겹친다 했을때 가장 먼저 떠올려야 하는것은 set이다
  2. 행과 열 그리고 3*3 블록이 같은지를 살펴봐야한다
  3. 열로 계산할때 ij를 바꿔 반복문을 수행해도 괜찮지만 zip함수를 사용해서 행렬을 뒤집는 방법을 사용하면 훨씬 간편해진다

코드

def solve():
    for lst in arr: #행 계산
        if len(set(lst)) != N:
            return 0
    
    arr1 = list(map(list,zip(*arr))) #zip함수를 통해 행열을 뒤집어준다
    for lst in arr1: #열 계산
        if len(set(lst)) != N:
            return 0
    
    for i in range(0,9,3):
        for j in range(0,9,3):
            lst = arr[i][j:j+3] + arr[i+1][j:j+3] + arr[i+2][j:j+3]
            if len(set(lst)) != N:
                return 0
    
    return 1
            


T = int(input())

for t in range(1,T+1):
    N = 9
    arr = [list(map(int,input().split())) for _ in range(N)]

    ans = solve()
    
    print(f'#{t} {ans}')
profile
개발자가 되고싶은 사람
post-custom-banner

0개의 댓글