스도쿠 검증

최민수·2023년 7월 11일
0

알고리즘

목록 보기
64/94
def checkUnique3x3(array):
    visited = [False for _ in range(10)]
    for rr in range(3):
        for cc in range(3):
            cur = array[rr][cc]
            if visited[cur]:
                return False
            visited[cur] = True
    return True


def checkUnique9x9(line):
    visited = [False for _ in range(10)]
    for el in line:
        if visited[el]:
            return False
        visited[el] = True
    return True


def check3x3():
    idx = [0, 3, 6]
    for ii in idx:
        for jj in idx:
            tempArray = [[] for _ in range(3)]
            tempArray[0] = graph[ii][jj:jj+3]
            tempArray[1] = graph[ii+1][jj:jj+3]
            tempArray[2] = graph[ii+2][jj:jj+3]

            if not checkUnique3x3(tempArray):
                return False
    return True


def check9x9():
    # 가로
    for k in range(9):
        if not checkUnique9x9(graph[k]):
            return False
    # 세로
    for k in range(9):
        tempLine = []
        for ck in range(9):
            tempLine.append(graph[ck][k])
        if not checkUnique9x9(tempLine):
            return False
    return True


T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    graph = [[] for _ in range(9)]
    for i in range(9):
        temp = map(int, input().split())
        for item in temp:
            graph[i].append(item)

    if check3x3() and check9x9():
        print("#" + str(test_case) + " " + str(1))
    else:
        print("#" + str(test_case) + " " + str(0))

D2

역시 꼼꼼한 구현 문제.
3x3, 9x9 체크 로직만 잘 설계하면 끝나는 문제였다.

이중 for문에서 초기화 로직 짤 때 더 주의하면 좋겠다.


출처: https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AYj2mga6ZewDFASl&contestProbId=AV5Psz16AYEDFAUq&probBoxId=AYj2nEQ6ZfkDFASl&type=PROBLEM&problemBoxTitle=%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98+Track+%28%EB%82%9C%EC%9D%B4%EB%8F%84+%EC%A4%91%29&problemBoxCnt=5

profile
CS, 개발 공부기록 🌱

0개의 댓글