새소식

⌨️ Algorithms/백준

[Python] 백준 9663번_N-Queen

2022. 8. 19. 20:59

  • -

https://www.acmicpc.net/problem/9663

 

9663번: N-Queen

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

n = int(input()) # 체스판 크기: n × n
answer = 0
row = [0]*n # 1차원으로 좌표 표현 ex) row[1] = 2 -> (1,2)

# 동일한 열 또는 대각선에 위치한 경우, 탐색하지 않음
def is_promising(x): # x: 말을 두는 위치
  for i in range(x):
    # 동일한 열 또는 대각선에 위치하면  
    if row[x] == row[i] or abs(row[x]-row[i]) == abs(x-i): # abs(row[x]-row[i]) == abs(x-i) -> 대각선
      return False # 퀸을 놓지 못함
  return True # 퀸을 놓을 수 있음

def solution(x):
  global answer

  # n번째 칸에 닿으면 (= 탐색이 완료되면)
  if x == n: 
    answer += 1 
    return 
    
  # n번째 칸에 안 닿았을 때  
  else:
    for i in range(n):
      row[x] = i # (x,i)에 퀸을 놓음
      # is_promising 로직 실행
      if is_promising(x):
        # 재귀적으로 한칸씩 키워서 탐색 진행
        solution(x+1)
  
solution(0)
print(answer)

 

비슷한 코드로 여러번 제출해봤는데도 계속 시간 초과 떠서 찾아보니

이 문제는 언어를 Python3가 아닌 pypy3로 선택해서 제출하면 통과된다..! 

 

 

 

 

[실전 알고리즘] 0x0C강 - 백트래킹

이번에는 백트래킹을 배워보도록 하겠습니다. 백트래킹도 재귀와 더불어 많은 사람들이 고통을 호소하는 알고리즘 중 하나이지만 의외로 그 재귀적인 구조에 매료되어서 참재미를 알아버리는

blog.encrypted.gg

 

 

 

 

참고)

 

https://blue-coding-story.tistory.com/114

 

[백준 9663- N-Queen][파이썬] 백 트래킹, dp -19일차

https://www.acmicpc.net/problem/9663 2가지로 풀이했다. back tracking, dp 1. 백 트래킹 key point: is_promising, x==n에 answer+=1 is_promising -> 같은 열에 있거나 대각선에 있으면 false를 return 해서..

blue-coding-story.tistory.com

 

https://txegg.tistory.com/108

 

[BOJ] 9663. N-Queen

백준 문제 주소 : https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수..

txegg.tistory.com

 

https://enlqn1010.tistory.com/45

 

Python 백준 8320번 - N-Queen, 백트래킹 알고리즘과 pruning(가지치기)

문제 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어

enlqn1010.tistory.com

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!