티스토리 뷰

728x90

풀이

첫번째 for문에서 가로, 세로 중복 검사를 해주고, 두번째 for문에서 3x3 격자 검사를 해줬다.

각 숫자가 몇번 나왔는지 카운팅할 리스트를 만들고 카운트 해줬다.

주의 ❕ 총합이 45가 되는지로 검사하면 안된다. 5가 9번 나오는 경우도 고려해야 하기 때문이다.

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

    result = 1
    # 가로 세로 검사
    for i in range(9):
        cnt_r = [0] * 10
        cnt_c = [0] * 10
        for j in range(9):
            cnt_r[arr[i][j]] += 1
            cnt_c[arr[j][i]] += 1

        # 중복 체크
        for k in range(1, 10):
            if cnt_r[k] != 1:
                result = 0
                break
            if cnt_c[k] != 1:
                result = 0
                break

    # 3x3 격자 검사
    for i in range(3):
        for j in range(3):
            cnt_x = [0] * 10
            for k in range(3):
                for l in range(3):
                    cnt_x[arr[3*i+k][3*j+l]] += 1

            for k in range(1, 10):
                if cnt_x[k] != 1:
                    result = 0
                    break

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

 

댓글