dgw0620   2년 전

어떤 부분을 개선해야 시간초과가 안날까요?? positon리스트에 위치를 기억하여 풀이하는 방식으로 풀이했습니다.

amsminn   2년 전

https://www.acmicpc.net/board/...

같은 문제인듯합니다

dgw0620   2년 전

append와 pop의 문제인것 같아서 1차원 배열로 바꾸었더니 시간은 많이 줄었지만 그래도 시간초과가 나오네요.. ㅠㅠㅠ

import sys
from timeit import default_timer as timer
from datetime import timedelta

start = timer()

def NQueenFound(level):
    global count
    global position

    if level == n:
        count += 1
        position[level - 1] = -1
        return 1

    else:
        for i in range(n):
            if Promising(i, level):
                position[level] = i
                NQueenFound(level + 1)

        position[level] = -1

def Promising(posi, level):
    for i in range(level):
        if posi == position[i] or level - i == abs(posi - position[i]):
            return False
    return True

if __name__ == "__main__":
    n = int(sys.stdin.readline())
    count = 0
    position = [-1] * n
    
    NQueenFound(0)

    print(count)
    end = timer()
    print(timedelta(seconds=end - start))

dgw0620   2년 전

python3에선 시간초과가 나오고 pypy3에선 풀리네요.. ㅠㅠ

amsminn   2년 전

함수 호출 한번마다 O(n^2)의 반복문을 돌리는데 O(n)에 할 수 있습니다.

그게 아까 올린 링크의 답변이에용

댓글을 작성하려면 로그인해야 합니다.