백준 9633 N-Queen

tiki·2021년 5월 12일
0

백준

목록 보기
1/30

백준 9633 알고리즘 연습

해당 문제는 백트래킹을 사용하여 푸는 문제다.
가능한 모든 경로를 찾아봐야하지만 일반적인 dfs로 푼다면 시간초과가 되기 때문에
중간 중간 확인을 하면서 문제와 맞지 않는 경우들은 모든 경로를 찾을 때 포함되지 않도록 하는 것이다.

백트래킹을 사용해서 모든 경로를 확인하면 시간적으로 덜 걸리는 것을 알 수 있다.

n = int(input())

result = 0

def check(visitied, depth):
  global result 
  for number in range(n):
    if number in visitied:
      continue
    if find_queen(visitied, depth, number):
      if depth == n-1 :
        result+=1
      else:
        visitied[depth] = number
        check(visitied, depth+1)
        visitied[depth] = -1
        
def find_queen(visitied, depth, queen_row): 
  for v in range(depth):
    if abs(visitied[v] - queen_row) == abs(v - depth):
      return False
  return True       


for i in range(n):
  visitied = [-1 for _ in range(n)]
  visitied[0] = i
  check(visitied, 1)

if n == 1:
  result = 1
  
print(result)    

파이썬을 활용해서 문제를 풀었다.

알고리즘의 시간을 줄이기 위해서 노력을 하느라 해당 문제를 푸는데 시간이 많이 소요되었다. 그리고 문제를 다 해결해도 '틀렸습니다' 만 결과로 나와서 당황하고 오류를 찾는데도 시간이 많이 소요되었다.

결과적으로 원인은 n=1 일때 result 가 1로 나온다는 것을 제대로 처리해주지 못했기 때문이다.

profile
하루하루 조금씩 발전하려는 개발자 입니다.

0개의 댓글

관련 채용 정보