๋ฌธ์
ํ๋ก๊ทธ๋๋จธ์ค N-Queen
https://school.programmers.co.kr/learn/courses/30/lessons/12952'
์ฝ๋
def solution(n):
global answer
v1 = [0 for _ in range(n)] # ์ด
v2 = [0 for _ in range(n * 2)] # ๋๊ฐ์ ์๋ฐฉ
v3 = [0 for _ in range(n * 2)] # ๋๊ฐ์ ํ๋ฐฉ
answer = 0
def dfs(row):
global answer
# ์ข
๋ฃ ์กฐ๊ฑด
if row == n:
answer += 1
return
for col in range(n):
if v1[col] == v2[row + col] == v3[row - col] == 0:
v1[col] = v2[row + col] = v3[row - col] = 1
dfs(row + 1)
v1[col] = v2[row + col] = v3[row - col] = 0
dfs(0)
return answer
ํ์ด
def solution(n):
global answer
v1 = [0 for _ in range(n)] # ์ด
v2 = [0 for _ in range(n * 2)] # ๋๊ฐ์ ์๋ฐฉ
v3 = [0 for _ in range(n * 2)] # ๋๊ฐ์ ํ๋ฐฉ
answer = 0
ํ์ dfs ํจ์๋ฅผ ๋ด๋ถํจ์๋ก ๋ฃ๊ณ , ๊ทธ ์์์ answer ๋ณ์๋ ์ธ๊ฑฐ๊ธฐ ๋๋ฌธ์ answer๋ฅผ ์ ์ญ๋ณ์ ์ฒ๋ฆฌ ํด์ค๋ค.
v1, v2, v3๋ ํด๋น ์ขํ์ ํธ์ ๋์ ์ ์๋์ง ์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง ๋ฐฐ์ด์ด๋ค.
0์ด๋ผ๋ฉด ํธ์ ๋์ ์ ์๊ณ , 1์ด๋ผ๋ฉด ํธ์ ๋์ ์ ์๋ค.
def dfs(row):
global answer
# ์ข
๋ฃ ์กฐ๊ฑด
if row == n:
answer += 1
return
for col in range(n):
if v1[col] == v2[row + col] == v3[row - col] == 0:
v1[col] = v2[row + col] = v3[row - col] = 1
dfs(row + 1)
v1[col] = v2[row + col] = v3[row - col] = 0
์ฒด์คํ์ ํ์ ๊น์ด๋ก ์ก๊ณ ๊น์ด ์ฐ์ ํ์์ ํ๋ฉฐ ์ต๋๋ก ํธ์ ๋์ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ๋ค.
์ฝ๋์ ํ๋ฆ์ ์ํด์ ๋ฐ๋ณต๋ฌธ๋ถํฐ ํ์ด๋ฅผ ์ ์๊ฒ์ด๋ค.
for col in range(n):
if v1[col] == v2[row + col] == v3[row - col] == 0:
v1[col] = v2[row + col] = v3[row - col] = 1
dfs(row + 1)
v1[col] = v2[row + col] = v3[row - col] = 0
ํด๋น ํ(๊น์ด์ฐ์ ํ์์ ๊น์ด)๊ณผ ์ด(๋ฐ๋ณต๋ฌธ์ col)์ ํธ์ ๋๋๋ค๋ฉด,
์์ผ๋ก ๊ทธ ์ด๊ณผ ๋๊ฐ์ ์๋ฐฉ, ํ๋ฐฉ์ ํธ์ ๋์ ์ ์๋ ์๋ฆฌ๊ฐ ๋ ํ ๋ ํด๋น v1, v2, v2์ ์๋ฆฌ๋ฅผ 1๋ก ๋ฐ๊พธ๊ณ
dfs์ ๋งค๊ฐ๋ณ์๋ฅผ 1์ถ๊ฐ ํจ์ผ๋ก์จ ๋ค์ ํ์ผ๋ก ๋์ด๊ฐ๋ค.
# ์ข
๋ฃ ์กฐ๊ฑด
if row == n:
answer += 1
return
๋ชจ๋ ํ์ ๋ค ํ์ํ์๋ค๋ฉด
ํธ์ ์ต๋๋ก ๋์ ์ ์๋ ๊ฒฝ์ฐ์ ์ ํ๋๋ฅผ ์ฐพ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก answer์ 1์ ์ถ๊ฐํ๊ณ
return ํ๋ค.
dfs(0)
return answer
0๋ฒ์งธ ํ๋ถํฐ dfs๋ฅผ ์คํํ๋ค.
dfs๋ฅผ ์คํํ๋ฉด ํธ์ ์ต๋๋ก ๋์ ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ์ผ๋ฏ๋ก answer์ ๋ฐํํ๋ค.
์๋กญ๊ฒ ๋ฐฐ์ด์ / ๋๋์
- ์ด์ค๋ฐฐ์ด ์ธ๋ฑ์ค์ ํฉ/์ฐจ๋ฅผ ์ด์ฉํ์ฌ ๋ฐฉ๋ฌธ๋ฐฐ์ด์ ๋ง๋ค ์ ์๋ค๋ ์ ์์ ์๊ฐ์ด ํ์ฅ๋์๋ค.
'์ฝ๋ฉํ ์คํธ๐ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์์์ฐพ๊ธฐ (0) | 2024.08.06 |
---|---|
[๋ฐฑ์ค] 1135. ๋ด์ค ์ ํ๊ธฐ (0) | 2024.08.03 |
[๋ฐฑ์ค] 1927. ์ต์ ํ & 11279. ์ต๋ ํ (0) | 2024.07.31 |
[๋ฐฑ์ค] 14888. ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (2) | 2024.07.14 |
[๋ฐฑ์ค] 1012. ์ ๊ธฐ๋ ์๋ฐฐ์ถ (2) | 2024.07.14 |