[SWEA] - 1974. 스도쿠 검증

swea - 문제 링크

def isclear(arr):
    # 가로검사
    for r in range(9):
        row = arr[r][:]
        if len(row) != len(set(row)):
            return 0
    # 세로검사
    for c in range(9):
        column = []
        for r in range(9):
            column.append(arr[r][c])
        # 한 열이 다 담기고 나면 중복검사
        if len(column) != len(set(column)):
            return 0
    # 3*3배열 검사
    for r in range(0, 9, 3):
        for c in range(0, 9, 3):
            sub_arr = [row[c:c + 3] for row in arr[r:r + 3]]
            sub = []
            for i in range(3):
                for j in range(3):
                    sub.append(sub_arr[i][j])
                if len(sub) != len(set(sub)):
                    return 0
    return 1

for tc in range(1, int(input())+1):
    sudoku = [list(map(int, input().split())) for _ in range(9)]
    print('#{} {}'.format(tc, isclear(sudoku)))

🔑 문제 읽고나서 언제 다 구현하나했는데 3*3배열 검사 말고는 괜찮았다!
세로 검사인 경우 한번에 비교 할 수 없으므로 리스트에 담은 뒤 검사해야한다. (아닐수도 있음,,, 내가 모르는 것 일수도,,,😓)

💡3*3배열은 나도 이번 기회에 배웠다!

  • 이차원리스트에서 부분으로 잘라내고 싶을때!
for r in range(0, 9, 3):
        for c in range(0, 9, 3):
            sub_arr = [row[c:c + 3] for row in arr[r:r + 3]]

나는 3개 단위로 끊고 싶어서 step을 3으로 주었다.
아직은 좀 어렵지만,,, 빠른 시일내에 잘 이해해보자,,, 😥

좋은 웹페이지 즐겨찾기