티스토리 뷰
728x90
https://programmers.co.kr/learn/courses/30/lessons/12952
- 해설 :
백트래킹의 대표문제인 n-queen 문제이다. n*n 체스판에 n개의 퀸을 놓을 수 있는 방법의 수를 찾는 문제이다.
- 풀이 :
백트래킹은 pruning이 중요하다고 배웠다. 재귀로 모든 경우를 탐색하지만 더 탐색해도 의미가 없는 경우 (절대 답이 될 수 없는 경우) 에 대한 조건으로 재귀를 종료해주어야 한다. n-queen의 경우 세로, 또는 대각선에 퀸이 놓여져있는 경우를 pruning조건으로 선택하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def dfs(queen, row, n): count = 0 if n == row: return 1 for col in range(n): queen[row] = col for i in range(row): if queen[i] == queen[row]: break if abs(queen[i]-queen[row]) == row - i: break else: count += dfs(queen, row + 1, n) return count def solution(n): return dfs([0]*n, 0, n) | cs |
320x100
'Algorithm > Back Tracking' 카테고리의 다른 글
(Python/파이썬) - 백준(BOJ) 16983번 : 캠프 준비 (0) | 2022.05.12 |
---|---|
(Python/파이썬) - 백준(BOJ) 9944번 : NxM 보드 완주하기 (0) | 2022.05.03 |
(Python/파이썬) - 백준(BOJ) 12101번 : 1, 2, 3 더하기 2 (2) | 2022.04.26 |
(Python/파이썬) - 백준(BOJ) 1759번 : 암호 만들기 (3) | 2022.04.15 |
(Python) - BOJ(9663번) : N-Queen (0) | 2022.03.04 |
댓글
© 2022 WonSeok, All rights reserved