일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 신나는함수실행
- python3
- 백트래킹
- Loss
- two pointer
- 코테
- ML
- 코딩테스트
- 브루트포스
- sort
- 프로그래머스
- 머신러닝
- BF
- backtracking
- 완전탐색
- 투포인터
- Python
- dfs
- 알고리즘
- 재귀
- 1일1솔
- 백준
- 파이썬
- 재귀함수
- Virtual Memory
- Github
- CS
- OS
- Algorithm
- 정렬
Archives
- Today
- Total
이것저것 공부 기록하기
[Algorithm] 프로그래머스 Lv.3 N-Queen (backtracking, python3) 본문
Algorithm/Programmers
[Algorithm] 프로그래머스 Lv.3 N-Queen (backtracking, python3)
얍욥얍 2022. 1. 19. 10:54문제링크
https://programmers.co.kr/learn/courses/30/lessons/12952
문제설명
문제풀이
def promising(i, col): # 대각선 방향 겹치는지 체크
k = 1
flag = True
while k < i and flag:
if col[i] == col[k] or (abs(col[i]-col[k]) == i-k):
flag = False
k += 1
return flag
def nqueen(i,n,col): # 같은 행, 같은 열인지
global ans
if promising(i, col):
if i == n:
ans += 1
else:
for j in range(1, n+1):
col[i+1] = j
nqueen(i+1, n, col)
return ans
ans = 0
def solution(n):
col = [0] * (n + 1)
return nqueen(0,n,col)
def dfs(col,n,i):
cnt = 0
if n == i:
return 1
for j in range(n):
col[i] = j
for x in range(i):
if col[x] == col[i]:
break
if abs(col[x] - col[i]) == (i-x):
break
else:
cnt += dfs(col, n, i+1)
return cnt
def solution(n):
ans = dfs([0]*n, n, 0)
return ans
다른 풀이
야매이긴 하지만, 백준 문제처럼 조건이 더 빡센 n-queen 문제에서는 유용한 풀이인 것 같다.
def solution(n):
nQueen = [0, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712, 365596, 2279184, 14772512, 95815104, 666090624, 4968057848, 39029188884, 314666222712, 2691008701644, 24233937684440, 227514171973736, 2207893435808352, 22317699616364044, 234907967154122528]
return nQueen[n]
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 정렬 - Lv.2 - 가장 큰 수(Python3) (0) | 2021.02.01 |
---|---|
[Programmers] DFS - Lv.3 - 단어변환(Python) (0) | 2021.01.31 |
[Programmers] 탐욕법(Greedy) - Lv.2 - 구명보트 (Python) (2) | 2020.06.24 |
Comments