# 3. APS/SWEA

SWEA # Python_D2_1974_스도쿠 검증

둥굴둥굴둥굴레차 2021. 2. 25. 15:46

 

 

🙄 [문제]

 

같은 줄에 1 에서 9 까지의 숫자를 한번씩만 넣고,

3 x 3 크기의 작은 격자 또한 1 에서 9 까지의 숫자가 겹치지 않아야 한다.

입력으로 9 X 9 크기의 스도쿠 퍼즐의 숫자들이 주어졌을 때,

위와 같이 겹치는 숫자가 없을 경우 1을 정답으로 출력하고 그렇지 않을 경우 0 을 출력한다.

 

 

SW Expert Academy

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

swexpertacademy.com

 

[input]
10
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
…

[output]
#1 1
...
[범희 풀이]
import sys, pprint
sys.stdin = open("input.txt")

T = int(input())

# 가로검정
def row_check(arr):
    result = True
    for i in range(9):
        cnt = 0
        for j in range(9):
            cnt += arr[i][j]
        if cnt != 45:
            result = False
            return result
    return result


#  작은 네모 검정
def sm_check(arr):
    result = True
    r = [0, 0, 0, 3, 3, 3, 6, 6, 6]
    c = [0, 3, 6, 0, 3, 6, 0, 3, 6]
    for k in range(9):
        cnt = 0
        for i in range(3): # 0 1 2
            for j in range(3): # 0 1 2
                cnt += arr[i + r[k]][j + c[k]]
        if cnt != 45:
            result = False
            return result
    return result


for tc in range(1, T + 1):
    # 9 * 9 퍼즐판
    puzzle = [list(map(int, input().split())) for _ in range(9)]
    # 전치 퍼즐판
    t_puzzle = [[0 for _ in range(9)] for _ in range(9)]
    for i in range(9):
        for j in range(9):
            t_puzzle[i][j] = puzzle[j][i]
    ans = 0
    if row_check(puzzle) == True and row_check(t_puzzle) == True and sm_check(puzzle) == True:
        ans = 1

    print("#{} {}".format(tc, ans))