ํฐ์คํ ๋ฆฌ ๋ทฐ
ํ๋ก๊ทธ๋๋จธ์ค: N-Queen
dirmathfl 2020. 10. 29. 23:22๋ฌธ์
์ฝ๋ฉํ ์คํธ ์ฐ์ต - N-Queen
๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๊ฐ n์ธ ์ ์ฌ๊ฐํ์ผ๋ก๋ ์ฒด์คํ์ด ์์ต๋๋ค. ์ฒด์คํ ์์ n๊ฐ์ ํธ์ด ์๋ก๋ฅผ ๊ณต๊ฒฉํ ์ ์๋๋ก ๋ฐฐ์นํ๊ณ ์ถ์ต๋๋ค. ์๋ฅผ ๋ค์ด์ n์ด 4์ธ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ํธ์ ๋ฐฐ์นํ๋ฉด n๊ฐ์ ํธ์
programmers.co.kr
๋ฌธ์ ํ์ด
์์ ๋ค๋ฃฌ ๋ฐฑ์ค: 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
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค: ์ซ์ ๊ฒ์ (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 |