본문 바로가기
Problem Solving/SWEA

[SWEA|파이썬] 2806. N-Queen (D3)

by 청량리 물냉면 2023. 5. 7.
반응형
문제

https://tinyurl.com/2zrd5mef

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

🐍파이썬
T = int(input())
for test_case in range(1, T + 1):
    n = int(input())
    board = [0] * n
    answer = 0

    def dfs(x):
        global answer
        if x == n:  #n행의 depth까지 들어갔다면
            answer += 1     #퀸 놓는 경우의 수+1
            return
        for i in range(n):  #n행 반복
            board[x] = i    #x행, i열에 퀸 놓기
            for j in range(x):
            	#해당 위치에 퀸을 놓을 수 있는지 없는지 확인
                #동일한 열에 있거나 or 대각선상에 있을 때 퀸 놓기 불가
                if board[x] == board[j] or abs(board[x]-board[j]) == abs(x-j):
                    break
            #break문 실행이 되지 않았을 때 -> 퀸을 놓을 수 있다.
            else:
                dfs(x+1)    #다음 재귀 실행해서 새로운 퀸 놓기
    dfs(0)
    print("#{} {}".format(test_case, answer))

 

N-Queen은 대표적인 백트래킹 문제이다.

아직 이해가지 않는 부분은 더 공부하고 반복해서 익히도록 하자.

 

참고한 블로그

https://seongonion.tistory.com/103

 

[백준] 9663번 N-Queen - 파이썬(Python)

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

seongonion.tistory.com

👆 자세한 코드 설명을 확인할 수 있다.

 

https://jehwanyoo.net/2022/01/26/n-queen-%EB%AC%B8%EC%A0%9C-%EB%B0%B1%ED%8A%B8%EB%9E%98%ED%82%B9/

 

N-Queen 문제 (백트래킹)

문제https://programmers.co.kr/learn/courses/30/lessons/12952 알고리즘 유도체스판은 2차원 배열로 되어있다. 퀸들끼리 서로 간섭하지 않고 총 N개의 말을 체스판에 놓아야한다. 1줄부터 N줄까지 차례대로 퀸

jehwanyoo.net

 

반응형