[백준] 2580번 스도쿠 - python파이썬 (백트래킹)

2025. 1. 23. 13:25·코딩테스트/백준

문제

 

 

 

 

 

이 문제에서 고려해야하는 것은 크게 2가지이다

 

1. 가로, 세로에 1~9까지의 숫자가 한번만 나타나야 한다.
2. 굵은 선으로 구분된 정사각형안에 1~9가 한번만 나타나야한다.

 

 

 

이 조건을 해결하기 위해 함수를 따로 만들어 주었다.

 

그리고 이 문제는 완전탐색을 해주어야하는데 최대한 효율적으로 확인하기 위해 백트래킹 기법을 사용해주었다.

 

 

 

전체코드

 

sdoku = [list(map(int,input().split())) for _ in range(9)]

#x행을 확인하는 함수
def row(x,a):
    for i in range(9):
        if a == sdoku[x][i]:
            return False
    return True

#y열을 확인하는 함수
def col(y,a):
    for i in range(9):
        if a == sdoku[i][y]:
            return False
    return True

#x, y가 속한 정사각형을 확인하는 함수
def square(x,y,a):
    for i in range(3):
        for j in range(3):
            if a == sdoku[x//3*3 + i][y//3*3 + j]:
                return False
    return True

def backtracking(n):
    #빈칸을 모두 채웠다면 종료
    if n == len(blank):
        for s in sdoku:
            print(*s)
        exit(0)
    
    #1~9의 숫자 전부 확인
    for i in range(1,10):
        x = blank[n][0]
        y = blank[n][1]
        #i가 가로, 세로, 정사각형안에도 없다면
        if row(x,i) and col(y,i) and square(x,y,i):
            sdoku[x][y] = i
            backtracking(n+1)
            #다른 경우의 수를 확인하기 위해 복구
            sdoku[x][y] = 0 


blank = []
for i in range(9):
    for j in range(9):
        if sdoku[i][j] == 0:
            blank.append([i,j])
backtracking(0)

 

 

 

조건에 따라서 함수를 작성하여 이를 활용하는 방법을 생각하는 것이 가장 중요했던 문제였던 것 같다.

'코딩테스트 > 백준' 카테고리의 다른 글

[백준] 1504번 특정한 최단경로 - python파이썬 (시간초과 해결)  (0) 2025.02.05
[백준] 9935번 문자열 폭발 -python 파이썬 (시간초과 해결)  (1) 2025.02.04
[백준] 2110번 공유기 설치 - python 파이썬 (이분탐색)  (4) 2025.01.22
[백준]1806번 부분합 - python 파이썬  (0) 2025.01.21
[백준]11054번 가장 긴 바이토닉 부분수열 - python파이썬  (2) 2025.01.15
'코딩테스트/백준' 카테고리의 다른 글
  • [백준] 1504번 특정한 최단경로 - python파이썬 (시간초과 해결)
  • [백준] 9935번 문자열 폭발 -python 파이썬 (시간초과 해결)
  • [백준] 2110번 공유기 설치 - python 파이썬 (이분탐색)
  • [백준]1806번 부분합 - python 파이썬
hiwon
hiwon
천천히 굴러가는 코딩일기
  • hiwon
    하이원의 코딩 일기
    hiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • 프론트엔드 (0)
        • react (0)
      • 백엔드 (13)
        • node.js (1)
        • spring (6)
      • 코딩테스트 (57)
        • 백준 (41)
        • 프로그래머스 (15)
      • 프로디지털아카데미 (9)
        • 클라우드 (1)
        • JavaScript (1)
      • github (1)
      • AWS (2)
      • Infra (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    IT기획
    알고리즘
    BFS
    코딩테스트
    백준
    신한투자증권
    그리디
    EC2
    kdt교육
    백엔드
    Java
    bastion host
    알파코캠퍼스
    UnionFind
    spring
    github
    투포인터
    K디지털트레이닝
    프디아
    프로디지털아카데미
    AWS
    파이썬
    백트래킹
    MSA
    코테
    알파코
    다익스트라
    python
    깃허브
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hiwon
[백준] 2580번 스도쿠 - python파이썬 (백트래킹)
상단으로

티스토리툴바