~๋ชฉ์ฐจ~
๋ฌธ์
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GKs06AU0DFAXB
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- ์ ํ์ ์ธ Backtracking ๋ฌธ์ (DFS์์ ๊ฐ์ง์น๊ธฐ)
- ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์๊ฐํ๋ฉด์ ๊น์ด๊ฐ ๊ณง ๋ณด๋์ ํ์ด๊ณ ํด๋น ํ์์ ๋ฐฐ์น ๊ฐ๋ฅํ ์ด์ ์ฐพ๋ ๊ฒ์ด๋ค.
- ์ ๊ทธ๋ฆผ์ 3 x 3 ๋ณด๋ ์ผ ๋์ ํ์์ ์๊ฐํ ํ ๋ชจ์ต์ด๋ค.
- X ํ์๋ promisiong์ ๊ฑธ๋ ค์ ๋ ์ด์ ๊น์ด ํ์ํ์ง ์๊ณ ๋์ด๊ฐ๋ค.
- DFS(3) ์ด๋ผ๋ฉด ๋ชจ๋ ํ์ ํธ ์๋ฆฌ๊ฐ ์๋ง์ ๊ฒฝ์ฐ์ด๋ฏ๋ก ์นด์ดํธํด์ค๋ค.
- ๊ฐ์ ์ด์ ์๊ฑฐ๋ ๊ฐ์ ๋๊ฐ์ ์ ์๋ ๊ฒฝ์ฐ ํด๋น ๊ฒฝ์ฐ์ ๋ํด ๋์ด์ ํ์ํ์ง ์๋๋ค.
ใด ๋ ์ ์ด ๊ฐ๊ฐ (x1, y1), (x2, y2) ์ด๊ณ , | x1 - x2 | = | y1 - y2 | ์ผ ๋ ๊ฐ์ ๋๊ฐ์ ์ ์๋ค (same diagonal)
์์ฑ ์ฝ๋
def promising(row):
for i in range(row):
if column[row] == column[i] or row - i == abs(column[row] - column[i]):
# ํธ์ด ๊ฐ์ ๋๊ฐ์ ๋๋ ์ด์ ์กด์ฌํ๋ค๋ฉด ํ์ ์ค์ง
return False
return True
def dfs(row):
global result
if row == n: # n ๋ฒ์งธ ํ ํธ๊น์ง ๊ฒฐ์ ๋๋ค๋ฉด
result += 1
else:
for col in range(n): # row ํ์ ์ด๋ ์ด
column[row] = col # ํธ ๋ฐฐ์น
if promising(row): # (Backtracking) ๋ ํ์ํ ์ง ๊ฒฐ์
dfs(row+1)
for test in range(1, int(input())+1):
n = int(input()) # n * n ๋ณด๋
column = [-1]*n # i๋ฒ์งธ ํ์ ์์นํ ํธ์ ์ด ์์น
result = 0
dfs(0)
print("#{} {}".format(test, result))
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
'๐๋ฌธ์ ํ์ด > ๐งฉSWExpertAcademy' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] ํ์ด์ฌ 220. Magnetic | ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.04.25 |
---|---|
[SWEA] ํ์ด์ฌ 2817. ๋ถ๋ถ ์์ด์ ํฉ | BFS (0) | 2023.04.24 |
[SWEA] ํ์ด์ฌ 5215. ํ๋ฒ๊ฑฐ ๋ค์ด์ดํธ | DFS (2) | 2023.04.20 |
[SWEA] ํ์ด์ฌ 1209. Sum (0) | 2023.04.20 |
[SWEA] ํ์ด์ฌ 2805. ๋์๋ฌผ ์ํํ๊ธฐ (0) | 2023.04.19 |