๐ง๐ป [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)
'์๊ณ ๋ฆฌ์ฆ > DFS BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 14888 ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2023.04.07 |
---|---|
[Python] ๋ฐฑ์ค 15650 N๊ณผ M 2 (0) | 2023.04.02 |
[Python] ๋ฐฑ์ค 15649 N๊ณผ M (0) | 2023.04.02 |
[Python] ๋ฐฑ์ค 1915 ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ (0) | 2023.03.31 |
[Python] ๋ฐฑ์ค 1389 ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น (0) | 2023.03.29 |