ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
`DFS`๋ฅผ ํตํ ๋ฐฑํธ๋ํน์ผ๋ก NxN ํฌ๊ธฐ์ ์ฒด์คํ์์ Queen์ ๋ฐฐ์นํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ์ฐํ ์ ์๋ค. ์ด๋ ์์ ๋ค๋ฃฌ ๋ฐฑ์ค: 9663 N-Queen๊ณผ ๋์ผํ ๋ก์ง์ผ๋ก ํ๋ฉด ๋๋ค. N์ ํฌ๊ธฐ๊ฐ ์ต๋ 10์ด๊ธฐ ๋๋ฌธ์ ๋ฐฑ์ค์ ๋ฌธ์ ์๋ ๋ฌ๋ฆฌ Python์ผ๋ก๋ ์ถฉ๋ถํ ํต๊ณผํ ์ ์๋ค.
๋ค์ ํ๋ฒ ๋ก์ง์ ์๊ธฐํด๋ณด์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ํ์ ๊ฒฝ์ฐ DFS๋ฅผ ํธ์ถํ๋ฉฐ ์ฆ๊ฐ์ํค๋ฏ๋ก, ๋ณ๋์ ์ค๋ณตํ์ธ์ด ํ์ํ์ง ์๋ค.
- ์ด์ ๊ฒฝ์ฐ ํด๋น ์ด์ ์ ํํ๋ฉด `set`์ ์ถ๊ฐํ์ฌ ์ค๋ณต์ ํ์ธํ๋ค.
- ์ฐ์ธก ์๋จ์์ ์ข์ธก ํ๋จ์ ๋๊ฐ์ ์ ๊ฒฝ์ฐ ํ์ฌ `X + Y`๋ฅผ `set`์ ์ถ๊ฐํ์ฌ ๋ฐฉ์งํ ์ ์๋ค.
- ์ข์ธก ์๋จ์์ ์ฐ์ธก ํ๋จ์ ๋๊ฐ์ ์ ๊ฒฝ์ฐ ํ์ฌ `X - Y`๋ฅผ `set`์ ์ถ๊ฐํ์ฌ ๋ฐฉ์งํ ์ ์๋ค.
- ๋ฐฑํธ๋ํน์ด ๊ฐ๋ฅํ๋๋ก ๊ฐ์ง๋ฅผ ๋ป์ ํ์ `set`์์ ๋ค์ `remove`ํ์ฌ์ผ ํ๋ค.
์ฝ๋
T = int(input())
def dfs(x):
global answer
if x == n:
answer += 1
return
for y in range(n):
if y in columns or x + y in l_diagonals or x - y in r_diagonals:
continue
columns.add(y)
l_diagonals.add(x + y)
r_diagonals.add(x - y)
dfs(x + 1)
columns.remove(y)
l_diagonals.remove(x + y)
r_diagonals.remove(x - y)
for test_case in range(1, T + 1):
answer = 0
n = int(input())
columns, l_diagonals, r_diagonals = set(), set(), set()
dfs(0)
print('#' + str(test_case), answer)
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SWEA: 3074 ์ ๊ตญ์ฌ์ฌ (0) | 2020.10.10 |
---|---|
SWEA: 2814 ์ต์ฅ ๊ฒฝ๋ก (0) | 2020.10.07 |
SWEA: 2805 ๋์๋ฌผ ์ํํ๊ธฐ (0) | 2020.10.07 |
SWEA: 1289 ์์ฌ์ ๋ฉ๋ชจ๋ฆฌ ๋ณต๊ตฌํ๊ธฐ (0) | 2020.10.07 |
SWEA: 1234 ๋น๋ฐ๋ฒํธ (0) | 2020.10.07 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ