honey_pot

[Python] N-Queen 본문

문제 풀이

[Python] N-Queen

_tera_ 2022. 9. 22. 14:14

https://school.programmers.co.kr/learn/courses/30/lessons/12952


백트래킹 기본 문제라는데 전혀 기본같지 않은 난이도 왜 n-queen, n-queen 하는지 이해가 가는 알고리즘이다

유튜브 강의도 참고하고 그림도 그려보면서 이해했다

2차원 배열로 풀 것 같았는데 그냥 1차원 배열로 행은 인덱스로 생략하고 열만 보자고~~ 이런 풀이법이 있을 줄은...

그리고 풀었지만 시간 초과가 떠서 다른 사람들은 왜 시간 초과가 안 뜨나 찾아보느라 푼게 아니게 된 그런 문제

 

마지막 테케 시간초과 뜬 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def n_queen(graph,x,n):
    result = 0
    if x == n:
        return 1
    for i in range(n):
        graph[x] = i
        if promising(graph,x):
            result += n_queen(graph, x+1, n)
    return result
        
def promising(graph,x):
    for i in range(x):
        if graph[x] == graph[i] or abs(graph[x] - graph[i]) == abs(x-i):
            return False
    return True
 
def solution(n):
    graph = [0* n
    return n_queen(graph, 0, n)
cs

 

graph 변수 생성해서 안 넘기고 배열 채로 파라미터 주고 n을 파라미터로 주는 부분도 뺐더니 통과

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def n_queen(graph,x):
    result = 0
    n = len(graph)
    if x == n:
        return 1
    for i in range(n):
        graph[x] = i
        if promising(graph,x):
            result += n_queen(graph, x+1)
    return result
        
def promising(graph,x):
    for i in range(x):
        if graph[x] == graph[i] or abs(graph[x] - graph[i]) == abs(x-i):
            return False
    return True
def solution(n):
    return n_queen([0* n, 0)
cs

'문제 풀이' 카테고리의 다른 글

[Python] 이중우선순위큐  (0) 2022.09.22
[Python] 정수 삼각형  (0) 2022.09.22
[Python] 하노이의 탑  (0) 2022.09.22
[Python] 가장 큰 정사각형 찾기  (1) 2022.09.21
[Python] 줄 서는 방법  (1) 2022.09.21
Comments