9663 : N-Queen

9663 : N-Queen#

  • https://d2gd6pc034wcta.cloudfront.net/tier/12.svg gold 4

์‹œ๊ฐ„์ œํ•œ

๋ฉ”๋ชจ๋ฆฌ์ œํ•œ

์ •๋‹ต๋น„์œจ

10์ดˆ

128MB

46.6%

๋ฌธ์ œ

N-Queen ๋ฌธ์ œ๋Š” ํฌ๊ธฐ๊ฐ€ N ร— N์ธ ์ฒด์ŠคํŒ ์œ„์— ํ€ธ N๊ฐœ๋ฅผ ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋†“๋Š” ๋ฌธ์ œ์ด๋‹ค.

N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ€ธ์„ ๋†“๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

1<=n<15

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ํ€ธ N๊ฐœ๋ฅผ ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋†“๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ถœ๋ ฅ

python#

import sys, os

problem_num = "9663"

path = os.getcwd() + f"\\txt\\{problem_num}" + ".txt"
sys.stdin = open(path, "r")
input = sys.stdin.readline
n = int(input())
8
def solveNQueens(n):
    def can_place(row, col):
        for i in range(row):
            if (
                board[i] == col
                or board[i] - i == col - row
                or board[i] + i == col + row
            ):
                return False
        return True

    def place_queen(row, n):
        if row == n:
            result.append(board[:])
            return
        for col in range(n):
            if can_place(row, col):
                board[row] = col
                place_queen(row + 1, n)
                board[row] = 0

    result = []
    board = [0] * n
    place_queen(0, n)
    return result
len(solveNQueens(5))
10

Python - class#

class Board:
    def __init__(self, size):
        self.size = size
        self.columns = []

    def place_in_next_row(self, column):
        self.columns.append(column)

    def remove_in_current_row(self):
        return self.columns.pop()

    def is_this_column_safe_in_next_row(self, column):
        row = len(self.columns)
        for i in range(row):
            if (
                (self.columns[i] == column)
                or (self.columns[i] - i == column - row)
                or (self.columns[i] + i == column + row)
            ):
                return False
        return True

    def display(self):
        for row in range(self.size):
            for column in range(self.size):
                if column == self.columns[row]:
                    print("Q", end=" ")
                else:
                    print(".", end=" ")
            print()


class NQueens:
    def __init__(self, size):
        self.size = size
        self.solutions = 0
        self.solve()

    def solve(self):
        self.board = Board(self.size)
        self.place_queen(0)
        print("Found", self.solutions, "solutions")

    def place_queen(self, target_row):
        if target_row == self.size:
            self.solutions += 1
            # self.board.display()
            return
        for column in range(self.size):
            if self.board.is_this_column_safe_in_next_row(column):
                self.board.place_in_next_row(column)
                self.place_queen(target_row + 1)
                self.board.remove_in_current_row()
NQueens(8)
Found 92 solutions
<<<<<<< HEAD
<__main__.NQueens at 0x19c176ee930>
=======
<__main__.NQueens at 0x297fa78cfd0>
>>>>>>> c424194691c9cf2ab72e6a646a5c7648c066f8cc