ABOUT ME

Today
Yesterday
Total
  • 2580 스도쿠
    알고리즘/백준 2019. 3. 6. 02:12
    1. 코드

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    sudoku = [list(map(int,input().split())) for _ in range(9)]
     
    def findBlank():
        for i in range(9):
            for j in range(9):
                if sudoku[i][j] == 0:
                    return i,j
        return -1-1
     
    def checkrow(r,n):
        for i in range(9):
            if sudoku[r][i] == n:
                return False
        return True
     
    def checkcol(c,n):
        for i in range(9):
            if sudoku[i][c] == n:
                return False
        return True
     
    def checkbox(r,c,n):
        row = (r//3)*3
        col = (c//3)*3
        for i in range(3):
            for j in range(3):
                if sudoku[row+i][col+j] == n:
                    return False
        return True
     
    def Isok(r,c,n):
        if checkrow(r,n) and checkcol(c,n) and checkbox(r,c,n):
            return True
        return False
     
    def fill():
        r, c = findBlank()
        if r == -1:
            return True
        for n in range(1,10):
            if Isok(r,c,n):
                sudoku[r][c] = n
                if fill():
                    return True
                sudoku[r][c] = 0
        return False
     
    fill()
    for i in range(9):
        print(*sudoku[i])
     
    cs


    2. 후기

    알고리즘 분류 - 백트래킹

    파이썬으로 푸니깐 시간초과가 나온다. 마지막은 배열을 간단히 출력할 때 유용하다. 

    이 코드는 fill에서 재귀를 돌면서 스도쿠에서 가장처음으로 비어있는 칸을 찾은 후 모든 조건(가로,세로,네모)를 만족하는 1~9중 수를 찾아 입력한다. 

    만약 다음 빈칸에서 모든 수를 넣어도 만족하지 않으면 그 전으로 돌아와 다른 수를 넣고 다시 시도한다. 

    '알고리즘 > 백준' 카테고리의 다른 글

    2003 수들의 합 2 - 투포인터  (0) 2019.03.08
    12100번 2048(easy) - DFS  (0) 2019.03.08
    13460 구슬 탈출 2 -BFS  (0) 2019.03.07
    1062 가르침  (1) 2019.03.06
    14391 종이조각  (0) 2019.03.06
Designed by Tistory.