Algorithm/SWEA

[SWEA 1974] 스도쿠 검증

DongKeun2 2022. 2. 15. 15:20

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Psz16AYEDFAUq&categoryId=AV5Psz16AYEDFAUq&categoryType=CODE&problemTitle=%EC%8A%A4%EB%8F%84%EC%BF%A0+%EA%B2%80%EC%A6%9D&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

🔥 작성 코드 (🌪️56,688kb 129ms)

def sudoku(arr):
    for i in range(9):
        s1 = set()
        s2 = set()
        for j in range(9):
            s1.add(arr[i][j])
            s2.add(arr[j][i])
        if len(s1) < 9 or len(s2) < 9:
            return 0

    for i in range(3):
        for j in range(3):
            s3 = set()
            for n in range(3 * i, 3 * i + 3):
                for m in range(3 * j, 3 * j + 3):
                    s3.add(arr[n][m])
            if len(s3) < 9:
                return 0
    return 1


T = int(input())

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

    print(f'#{test_case}', sudoku(arr))

 

⭕ 해설

 

  1. 스토쿠는 행, 열 또는 3X3 박스 안에 1~9까지 숫자가 존재해야 하기 때문에 set을 사용하였습니다.
  2. 각 행, 열을 돌며 set에 수를 추가하고 그 길이를 조사했습니다.
    • 완전한 스도쿠라면 무조건 len(set) = 9 입니다.
  3. 마찬가지로 3x3 박스를 조사하기 위해 범위를 정해주고 그 안의 수를 set에 저장, 길이 조사
  4. 하나라도 조건을 만족하지 못한다면 0을 반환하고, 모두 만족한다면 1을 반환하였습니다.