[Python] BOJ 9663. N-Queen

2022. 3. 20. 00:07·Algorithm/백준 문제풀이

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

 

9663번: N-Queen

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

www.acmicpc.net

NxN 체스판에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력하는 문제로 N=4일때를 예시로 들면 다음과 같이 설명할 수 있다

 

4x4 체스판에 퀸 4개가 아래와 같이 있다

 

상태 공간 트리(State-Space Tree)로 1~4번 퀸의 위치를 표현할 수 있다

 

아래는 4개의 퀸들이 서로 공격할 수 없게 놓은 경우의 수 중 하나로, 상태 공간 트리로 표현했을 때는 다음과 같은 경로를 거치게 된다

- 퀸은 현재 위치에서 상하좌우의 직선방향, 대각선 방향으로 움직일 수 있음

코드는 다음과 같다

def is_Possible(x): 
    global board
    for i in range(x): 
    	# 직선방향 검사 or 대각선 방향 검사
        if board[x] == board[i] or abs(board[i]-board[x]) == x-i:
            return False
    return True

def dfs(x):
    global ans, N, board
    if x == N:
        ans += 1
        return
    for i in range(N):
        board[x] = i
        if is_Possible(x):
            dfs(x+1)

N = int(input())
ans = 0
board = [0] * (N)
dfs(0)
print(ans)
반응형

'Algorithm > 백준 문제풀이' 카테고리의 다른 글

[백준] 12865번: 평범한 배낭 - 파이썬(Python)  (0) 2024.06.10
[Python] BOJ 1300. k번째 수  (0) 2021.01.31
[C++] BOJ 1051. 숫자 정사각형  (0) 2020.09.30
[C++] BOJ 4386. 별자리 만들기  (0) 2020.09.23
[C++] BOJ 7576. 토마토  (0) 2020.09.16
'Algorithm/백준 문제풀이' 카테고리의 다른 글
  • [백준] 12865번: 평범한 배낭 - 파이썬(Python)
  • [Python] BOJ 1300. k번째 수
  • [C++] BOJ 1051. 숫자 정사각형
  • [C++] BOJ 4386. 별자리 만들기
계속지나가기
계속지나가기
NLP Engineer
  • 계속지나가기
    코딩스뮤
    계속지나가기
  • 전체
    오늘
    어제
    • 코딩스뮤:) N
      • Algorithm
        • 백준 문제풀이
        • 프로그래머스 문제풀이
        • 알고리즘 이론
        • 자료구조
        • SW Expert Academy
      • 인공지능(AI)
        • LLMs
        • 자연어처리(NLP)
        • 컴퓨터비전(CV)
        • 딥러닝(DL)
        • 머신러닝(ML)
        • 인공지능기초수학
        • 선형대수학
      • 컴퓨터 세팅
      • Computer Science
        • 유닉스프로그래밍
        • 프로그래밍언어론
        • 디자인패턴
        • 클린코드
        • SW 영어
        • 리눅스
        • 논리회로
      • Server
        • Docker
      • 바이브 코딩 N
        • 클로드 코드 N
  • 블로그 메뉴

    • 홈
    • Who Am I(CV)
    • 태그
  • 링크

    • 깃허브 주소
  • 공지사항

  • 인기 글

  • 태그

    기계학습
    네트워크플로우
    경사하강법
    손실함수
    DIP
    비용함수
    최대유량
    MaximumFlow
    NLP
    지도학습
    컴퓨터비전
    f1-score
    디지털이미지처리
    알고리즘
    군집화
    LM
    언어모델
    선형회귀
    DigitalImageProcessing
    머신러닝
    파이썬 클린코드
    ComputerVision
    ML
    machinelearning
    에지검출
    networkflow
    패턴인식
    SIFT
    결정경계
    비지도학습
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
계속지나가기
[Python] BOJ 9663. N-Queen

티스토리툴바