KKG
Programming
KKG
전체 방문자
오늘
어제
  • 전체 글 보기 (84)
    • 회고 (9)
    • Bootcamp (19)
    • Error Handling (2)
    • Kotlin (1)
    • Java (19)
      • Java (14)
      • Spring (1)
      • JPA (2)
      • Link (2)
    • Python (5)
    • 알고리즘 (20)
      • 알고리즘 (4)
      • 백준 (14)
      • 프로그래머스 (1)
      • Link (1)
    • SQL (5)
      • SQL (1)
      • MySQL (4)
    • Web (2)
    • etc (1)

블로그 메뉴

  • 태그
  • 방명록
  • 깃허브

인기 글

티스토리

hELLO · Designed By 정상우.
KKG

Programming

알고리즘/백준

[Python] 백준(BOJ) 9663번 N-Queen(백트래킹)

2022. 2. 1. 21:36
 

9663번: N-Queen

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

www.acmicpc.net

문제

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.

N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (1 ≤ N < 15)

출력

첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.

예제 입력 1

8

예제 출력 1

92

코드

n = int(input())
arr = [0] * n
cnt = 0

def det(num): # 검증 함수
    for v in range(num):
        if arr[num] == arr[v] or abs(arr[num] - arr[v]) == num - v: # 같은 위치, 대각선 검증
            return 0
    return 1
    
def func(num):
    global cnt
    
    if num == n : # 여기까지 도달하게 되면 cnt += 1을 통해 경우의 수를 카운트
        cnt += 1
        return
        
    for i in range(n):
        arr[num] = i
        if det(num): # 검증을 통과하면 func(num + 1) 호출
            func(num + 1)
func(0)
print(cnt)
    '알고리즘/백준' 카테고리의 다른 글
    • [Python] 백준(BOJ) 10989번 수 정렬하기 3 (계수 정렬)
    • [Python] 백준(BOJ) 2232번 분해합 (부르트포스)
    • [Python] 백준(BOJ) 2798번 블랙잭 (브루트포스)
    • [Python] 백준(BOJ) 11729번 하노이 탑 이동 순서 (재귀)

    티스토리툴바