For Programmer
백준 9663번 파이썬 문제풀이(N-Queen) 본문
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
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 5105번 파이썬 문제풀이(미로의 거리) - BFS, DFS (0) | 2022.02.25 |
---|---|
백준 1941번 파이썬 문제풀이(소문난 칠공주) (0) | 2022.02.24 |
백준 2239번 파이썬 문제풀이(스도쿠) (0) | 2022.02.24 |
백준 1918번 파이썬 문제풀이(후위 표기식) (0) | 2022.02.23 |
백준 1417번 파이썬 문제풀이(국회의원 선거) (0) | 2022.02.22 |
Comments