์๊ณ ๋ฆฌ์ฆ/DFS BFS
[Python] ๋ฐฑ์ค 9663 N-Queen
JayAlex07
2023. 4. 5. 12:48
๐ง๐ป [Python] ๋ฐฑ์ค 9663 N-Queen
Gold 4 - Backtracking
Queen์ ์, ์๋, ์ค๋ฅธ์ชฝ, ์ผ์ชฝ, ๋๊ฐ์ , 8 ๋ฐฉ๋ฉด ๋ชจ๋ ๊ณต๊ฒฉ์ ํ ์ ์๋ค
N์ด ์ฃผ์ด์ง๊ณ , ์ฒด์คํ ์ฌ์ด์ฆ๋ N x N ์ด๊ณ , N ๊ฐ์ Queen์ ๋ฃ์์ ๋ ์๋ก ๊ณต๊ฒฉํ ์ ์๋ ๋์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋ ๊ฒ
1์ฐจ์ ์ผ๋ก ์์ธํ ๋ณด๋ฉด, ๊ฐ ํ๊ณผ ์ด๋ง๋ค, Queen์ ํ๋์ฉ ๋ฐฐ์นํ ์ ์๋ค
- ์ด ๋ป์ ๊ตณ์ด ์ฒด์คํ ์์ฒด๋ฅผ ์ ๋ง๋ค์ด๋ ๋๋ค
- board = [0, 3, 1, 4, 2]
- ์๋ ์ฌ์ง์ ํํํ ๋ฆฌ์คํธ (board์ ์ธ๋ฑ์ค๊ฐ ์ด/row, board์ ๊ฐ์ด ํ/column)
- board ์์ ์๋ ๊ฐ๋ค์ ๋ชจ๋ ๋ฌ๋ผ์ผ ํ๋ค
row (board์ ์ธ๋ฑ์ค) | column (board์ ๊ฐ) |
---|---|
0 | 0 |
1 | 3 |
2 | 1 |
3 | 4 |
4 | 2 |
๊ทธ ๋ค์์๋ ๊ฐ Queen๋ค๋ผ๋ฆฌ ๊ณต๊ฒฉํ ์ ์๋ ๋๊ฐ์ ๊ฒฝ๋ก๊ฐ ๊ฒน์น์ง ์๋๋ก ํ๋ค
- Queen์ด ๊ฐ์ ๋๊ฐ์ ์์ ์์ ๊ฒฝ์ฐ, row์ column์ ๋นผ๋ฉด, ๊ฐ์ ๊ฐ์ด ๋์จ๋ค
- ์ฆ Queen์ด ๊ฐ์ ๋๊ฐ์ ์์ ์์นํ์ง ์๋๋ก, row์ column์ ๋บ์ ๋์, ๋ค๋ฅธ ๊ฐ์ด ๋์ค๋๋ก ํด์ผ ํ๋ค
์ฝ๋
N = int(input())
board = [0] * N
result = 0
def is_possible(c):
for column in range(c):
if board[c] == board[column] or abs(c - column) == abs(board[c] - board[column]):
return False
return True
def backtracking(start):
global result
if start == N:
result += 1
print(board)
return
for column in range(N):
board[start] = column
if is_possible(start):
backtracking(start + 1)
backtracking(0)
print(result)