def dfs(positions, row) :
n = len(positions)
if n == row:
#끝까지 왔으므로 1
return 1
count = 0
for col in range(n) :
positions[row] = col
if check(positions, row):
count += dfs(positions, row + 1)
return count
def check(pos, row) :
for i in range(row):
if pos[i] == pos[row] or (row-i == abs(pos[i] - pos[row])):
return False
return True
def solution(n):
ans = [0] * n
return dfs(ans, 0)
# 1~12까지
for i in range(1, 13):
print(solution(i))
오랜만에 다시 풀어본 nQueen 문제. 처음 풀었을 때보다 check 하는 로직을 더 간단하게 짜봤다.
'컴퓨터 > 코테' 카테고리의 다른 글
프로그래머스 여행경로 - 백트래킹 (0) | 2021.09.06 |
---|---|
릿코드 37- Sudoku Solver, nQueen 다시풀기 (0) | 2021.09.01 |
백준 2042 세그먼트 트리 (0) | 2021.09.01 |
백준 17114 - 미세먼지 확산 (0) | 2021.08.30 |
백준 11657 타임머신 (0) | 2021.08.30 |