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

shon4bw·2021년 8월 31일
0

🧐1일 1알

목록 보기
18/24
post-thumbnail

내 코드

T = int(input())
for tc in range(1, T +1) :
    sudoku = [list(map(int, input().split())) for _ in range(9)]
    # 가로, 세로, 3*3 체크
    # 잘 나오면 1, 그렇지 않으면 0
    # 포인트는 각각 [0] * 9 로 채워진 배열을 만드는 것

    # 가로
    flag = 1
    for x in range(9): # 9줄 체크
        check = [0] * 9 # [ 0 0 0 0 0 0 0 0 0 ]
        for y in range(9):
            check[sudoku[x][y]-1] = 1
            result = 1
        for z in range(9): # 0 1 2 3 4 5 6 7 8  [0,1,1,1,1..]
            result *= check[z] # 0이 남아있으면 곱하면 0이 되겠지?
            if result == 0 :
                flag = 0

    # 세로
    for x in range(9): # 9줄 체크
        check = [0] * 9 # [ 0 0 0 0 0 0 0 0 0 ]
        for y in range(9):
            check[sudoku[y][x]-1] = 1
            result = 1
        for z in range(9): # 0 1 2 3 4 5 6 7 8
            result *= check[z]
            if result == 0 :
                flag = 0

    # 3*3
    for x in range(0, 9, 3): # 0 3 6
        for y in range(0, 9, 3): # 0 3 6
            check = [0] * 9  # [ 0 0 0 0 0 0 0 0 0 ]
            for x1 in range(x, x+3) : # 0 1 2   # 여기서 맨날 틀리더라..?
                for y1 in range(y, y+3): # 0 1 2
                    check[sudoku[x1][y1]-1] = 1
                    result = 1
            for z in range(9) :
                result *= check[z]
                if result == 0:
                    flag = 0


    print('#{} {}'.format(tc, flag))

포인트👑

👆 가로, 세로, 3*3 각각 0으로 채워진 배열을 만들어 주는 것
✌ 0이 남았다면 곱해서 0이 된다 라는 아이디어

profile
cut_the_mustard

0개의 댓글