본문 바로가기
Problem Solving/BOJ

[BOJ][Python]백준 9663번 풀이

by NoiB 2021. 12. 19.
반응형

그냥 듀크입니다. 이번 문제는 진짜 오래걸렸는데요. 머리로는 알겠는데 재귀로 구현을 하려니 자꾸 뭐가 안되고 해서 시간이 많이 걸렸습니다. 제가 재귀 연습을 좀 해야겠다 하고 생각하게 해준 문제기도 하구요.

 

문제 링크 : https://www.acmicpc.net/problem/9663

 

9663번: N-Queen

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

www.acmicpc.net

코드 : 

import sys
ssr = sys.stdin.readline

def put_queen(cdx):
    if cdx == n:
        global cnt
        cnt += 1
    else:
        for i in range(n):
            if visited[i]:
                continue
            q_list[cdx] = i
            if check(cdx):
                visited[i] = True
                put_queen(cdx+1)
                visited[i] = False
            
def check(n):
    for i in range(n):
        if q_list[n] == q_list[i] or n-i == abs(q_list[n] - q_list[i]):
            return False
    return True
                
if __name__ == '__main__':
    n = int(ssr())
    cnt = 0
    q_list = [0 for _ in range(n)]
    visited = [False for _ in range(n)]
    
    put_queen(0)
    print(cnt)

참고로 말씀을 드리자면 파이썬은 pypy3로 제출하셔야 통과 될 겁니다. 기본적인 개념은 일단 퀸을 한 번 놔보고 check 함수에서 조건에 부합하는지를 확인한 다음 문제가 없으면 진행하고 문제가 있으면 인덱스를 올려가면서 해당 사이클을 반복하는 형식입니다. 미리 queen을 배치할 보드를 만들어놔야 인덱스에러가 뜨지 않습니다.

 

그냥 듀크였습니다.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]1259번 풀이  (0) 2021.12.19
[BOJ][Python]백준 2920번 풀이  (0) 2021.12.19
[BOJ][Python]5956번 풀이  (0) 2021.12.18
[BOJ][Python]11651 풀이  (0) 2021.12.06