For Programmer

백준 9663번 파이썬 문제풀이(N-Queen) 본문

코팅테스트/백준 문제 모음

백준 9663번 파이썬 문제풀이(N-Queen)

유지광이 2022. 2. 24. 21:43
728x90


N-Queen은 dfs에서 너무나 유명한 문제이므로 풀이 과정은 생략하겠다. 단, 해당 문제 시간초과코드와 통과코드가 2개있다. 둘다 존재하는데 거의 비슷한 코드인데 시간초과나는 이유를 모르겠다. 아마 in연산자가 매번 반복문을돌면서 비교하는 연산보다 더 빠르게 수행되기 때문인거 같다. 2개의 코드 모두 올려놓겠다.


1. 통과코드

def checking(r, c):
    for j in range(len(check)):
        if abs(j - r) == abs(check[j] - c):
            return False
    return True


def dfs(r):
    global count

    if r == N:
        count += 1
        return

    for col in range(N):
        if col not in check:
            if checking(r, col):
                check.append(col)
                dfs(r + 1)
                check.pop()


N = int(input())

check = []
count = 0


dfs(0)
print(count)

 

2.시간 초과 코드

def checking(r, c):
    for j in range(r):
        if check[j] == c or abs(j - r) == abs(check[j] - c):
            return False
    return True


def dfs(r):
    global count

    if r == N:
        count += 1
        return

    for col in range(N):
        if checking(r, col):
            check[r] = col
            dfs(r + 1)


N = int(input())

check = [0] * N
count = 0


dfs(0)
print(count)
728x90
Comments