For Programmer

SWEA 1947 파이썬 문제풀이(스도쿠 검증) 본문

코팅테스트/백준 문제 모음

SWEA 1947 파이썬 문제풀이(스도쿠 검증)

유지광이 2022. 2. 8. 22:07
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Psz16AYEDFAUq 

 

SW Expert Academy

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

swexpertacademy.com

 


간단한 구현문제이다. 2가지를 나눠서(3x3 구하는 부분, 가로 세로줄 구하는 부분) 반복문을 짜도 되고 한번의 반복문안에 위의 경우를 다 구할 수 있다. 

 

1. 2가지를 나눠서 구하는 경우

T = int(input())


def solution(order):
    # 작은 사각형 3 x 3 검사
    for i in range(0, 9, 3):
        for j in range(0, 9, 3):
            check_square = set()
            for k in range(i, i + 3):
                for h in range(j, j + 3):
                    check_square.add(array[k][h])
            if len(check_square) != 9:
                print(f'#{order} {0}')
                return

    # 전체 가로줄,세로줄 검사
    for i in range(9):
        check_list_r = set()
        check_list_c = set()
        for j in range(9):
            check_list_r.add(array[i][j])
            check_list_c.add(array[j][i])

        if len(check_list_r) != 9 or len(check_list_c) != 9:
            print(f'#{order} {0}')
            return
    # 만약 위에서 return 되지 않았다면 숫자가 겹치지 않는다는 말
    print(f'#{order} {1}')


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

    solution(order)

 

2. 한번의 반복문 안에서 모두 구하는 경우

T = int(input())


def solution(order):
    check_list_r = [set() for _ in range(9)]
    check_list_c = [set() for _ in range(9)]
    for i in range(0, 9, 3):
        for j in range(0, 9, 3):
            check_square = set()
            for k in range(i, i + 3):
                for h in range(j, j + 3):
                    for g in range(9):
                        if k == g:
                            check_list_c[g].add(array[k][h])
                        if h == g:
                            check_list_r[g].add(array[k][h])
                    check_square.add(array[k][h])
            if len(check_square) != 9:
                print(f'#{order} {0}')
                return

    for i in check_list_r:
        if len(i) != 9:
            print(f'#{order} {0}')
            return

    for j in check_list_c:
        if len(j) != 9:
            print(f'#{order} {0}')
            return

    print(f'#{order} {1}')


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

    solution(order)
728x90
Comments