ํฐ์คํ ๋ฆฌ ๋ทฐ
๐จ๐ป ์ฝ๋ฉํ
์คํธ/ํ๋ก๊ทธ๋๋จธ์ค
ํ๋ก๊ทธ๋๋จธ์ค: N-Queen
dirmathfl 2020. 10. 29. 23:22728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์์ ๋ค๋ฃฌ ๋ฐฑ์ค: 9663 N-Queen, SWEA: 2806 N-Queen๊ณผ ๋์ผํ ๋ฌธ์ ์ด๋ค. Queen์ ๊ฒฝ์ฐ ์, ํ, ์ข, ์ฐ์ ๋ค๋ฅธ Queen์ด ์์ด์ผ ํ๊ณ , ๋๊ฐ์ ์ผ๋ก๋ Queen์ด ์์ด์ผ ํ๋ค๋ ์กฐ๊ฑด์ ๋ง์กฑํ์ฌ์ผ ํ๋ค.
๋ฐ๋ผ์ Queen์ ๋ฐฐ์นํ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ํ๋จํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ์ ๊ฒฝ์ฐ DFS๋ฅผ ํธ์ถํ๋ฉฐ ์ฆ๊ฐ์ํค๋ฏ๋ก, ๋ณ๋์ ์ค๋ณตํ์ธ์ด ํ์ํ์ง ์๋ค.
- ์ด์ ๊ฒฝ์ฐ ํด๋น ์ด์ ์ ํํ๋ฉด `set`์ ์ถ๊ฐํ์ฌ ์ค๋ณต์ ํ์ธํ๋ค
- ์ฐ์ธก ์๋จ์์ ์ข์ธก ํ๋จ์ ๋๊ฐ์ ์ ๊ฒฝ์ฐ ํ์ฌ `X + Y`๋ฅผ `set`์ ์ถ๊ฐํ์ฌ ๋ฐฉ์งํ ์ ์๋ค.
- ์ข์ธก ์๋จ์์ ์ฐ์ธก ํ๋จ์ ๋๊ฐ์ ์ ๊ฒฝ์ฐ ํ์ฌ `X - Y`๋ฅผ `set`์ ์ถ๊ฐํ์ฌ ๋ฐฉ์งํ ์ ์๋ค.
- ๋ฐฑํธ๋ํน์ด ๊ฐ๋ฅํ๋๋ก ๊ฐ์ง๋ฅผ ๋ป์ ํ์ `set`์์ ๋ค์ `remove`ํ์ฌ์ผ ํ๋ค.
์ฝ๋
answer = 0
columns, l_diagonals, r_diagonals = set(), set(), set()
def dfs(x, n):
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, n)
columns.remove(y)
l_diagonals.remove(x + y)
r_diagonals.remove(x - y)
def solution(n):
dfs(0, n)
return answer
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค: ์ซ์ ๊ฒ์ (0) | 2020.11.02 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค: ๋ฐฐ๋ฌ (0) | 2020.11.01 |
ํ๋ก๊ทธ๋๋จธ์ค: 2 x n ํ์ผ๋ง (0) | 2020.10.29 |
ํ๋ก๊ทธ๋๋จธ์ค: ๊ฑฐ์ค๋ฆ๋ (0) | 2020.10.29 |
ํ๋ก๊ทธ๋๋จธ์ค: SQL - GROUP BY (0) | 2020.10.28 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ