소토
소토의 기록하는 삶
소토
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • Algorithm (34)
      • Problem (34)
    • Web (0)
    • ML & AI (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코드스테이츠
  • 패스트캠퍼스
  • 알고리즘
  • 패캠챌린지
  • 문제
  • 백준
  • 직장인자기계발
  • 직장인인강
  • 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
  • 패스트캠퍼스후기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
소토

소토의 기록하는 삶

Algorithm/Problem

[Baekjoon] 2580번 : 스도쿠

2022. 1. 17. 21:07

 

 

2580번: 스도쿠

스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루

www.acmicpc.net

Gold 4.

스도쿠의 규칙대로 빈 칸을 채우는 문제!

스도쿠는 9x9 칸에 가로, 세로, 3x3칸 내에 1-9까지의 숫자가 중복없이 들어가야 한다. 

 

문제 풀이

백트래킹 알고리즘 이용

1) 빈칸에 대해서 1-9까지 값을 넣어보고 가능한지 확인한다.

2) 가능하면 값을 넣고 다음 노드로 이동한다.

 

코드

graph, blank_list = [], []
for i in range(9):
    graph.append(list(map(int, input().split())))

for i in range(9):
    for j in range(9):
        if graph[i][j] == 0:
            blank_list.append((i, j))

# 가로줄에 중복되는 값이 있는지 확인
def check_board_a(x, num):
    for i in range(9):
        if num == graph[x][i]:
            return False
    return True

# 세로줄에 중복되는 값이 있는지 확인
def check_board_b(y, num):
    for i in range(9):
        if num == graph[i][y]:
            return False
    return True


# 3x3 정사각형 안에 중복되는 값이 있는지 확인
def check_board_c(x, y, num):
    nx = x // 3 * 3
    ny = y // 3 * 3
    for i in range(3):
        for j in range(3):
            if num == graph[nx+i][ny+j]:
                return False
    return True

def solution(idx):
    # idx가 마지막까지 가면 빈칸이 모두 채워진 것
    if idx == len(blank_list):
        for i in range(9):
            print(*graph[i]) #리스트의 값만 프린트
        exit(0)

    x = blank_list[idx][0]
    y = blank_list[idx][1]
    for i in range(1, 10):
        if check_board_a(x, i) and check_board_b(y, i) and check_board_c(x, y, i):
            graph[x][y] = i
            solution(idx+1)
            graph[x][y] = 0

solution(0)

 

여담(?)

 exit(0)을  사용하면 프로그램을 바로 끝낼 수 있다!

그리고 리스트를 문자열로 바꾸고 join할 필요 없이 *을 붙이면 값만을 print할 수 있다 ㅎ..

 

참고한 블로그 : https://hongcoding.tistory.com/118

728x90
저작자표시 (새창열림)

'Algorithm > Problem' 카테고리의 다른 글

[Baekjoon] 1003번 : 피보나치 함수  (0) 2022.01.19
[Baekjoon] 14889번 - 스타트와 링크  (0) 2022.01.18
[Baekjoon] 9663번 : N-Queen  (0) 2022.01.16
[Baekjoon] 10989번 : 수 정렬하기3  (0) 2022.01.13
[Baekjoon] 1436번 : 영화감독 숌  (0) 2022.01.12
    소토
    소토

    티스토리툴바