๐ค๋ฌธ์ ํด๊ฒฐ
Lv3 | ๋ฐฑํธ๋ํน, DFS
๊ท์น์ ์ฒด์ค๋ง์ ์ข์ฐ, ์์๋, ๋๊ฐ์ ๋ชจ๋ ๊ฒน์น์ง ์๊ฒ ํ๋ ๊ฒ์ด๋ค!
ํ์ง๋ง ๋ชจ๋ ๊ท์น์ ํ๋ํ๋ ์ฒดํฌํ๋ฉด ํจ์จ์ฑ ๋ง์ง๋ง์์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค!
- ์์๋ ๊ท์น: visited ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์ ์ธ๋ก(์ด) ํ์นธ์ ํ๋์ฉ๋ง ๋ค์ด๊ฐ ์ ์๊ฒ ํ๋ค.
- ์ข์ฐ ๊ท์น: ํ๋ฒ ๋ง์ ๋์ผ๋ฉด ๋ฌด์กฐ๊ฑด ๋ค์ ํ์ผ๋ก ๋์ด๊ฐ๋ค.
- ๋๊ฐ์ ๊ท์น: ๋ง์ ๋์ ์ค๋น๋ฅผ ํ๊ณ , ๊ทธ ์๋ฆฌ์ ์ผ์ชฝ ์๋๊ฐ์ ๊ณผ, ์ค๋ฅธ์ชฝ ์๋๊ฐ์ ์ ๋ง์ด ์๋์ง ์ฒดํฌ!
๋ง์ง๋ง ํ๊น์ง ๋ง์ ๋ ์ ์์ผ๋ฉด ์ฑ๊ณต!
๐จ
๐ป์์ค ์ฝ๋
def solution(n):
answer = 0
chess = [[0] * n for _ in range(n)] # ์ฒด์คํ
visited = [0] * (n + 1) # ์ธ๋ก์นธ ๋ฐฉ๋ฌธ ์ฒดํฌ
# ์กฐ๊ฑด์ ์ผ์น ํ๋ ์ง ์ฒดํฌ | ์ผ์ชฝ ๋๊ฐ์ , ์ค๋ฅธ์ชฝ ๋๊ฐ์
def check(x, y):
ly, ry = y, y
while x >= 0:
x -= 1
ly -= 1
ry += 1
if 0 <= ly: # ์ผ์ชฝ ๋๊ฐ์
if chess[x][ly]:
return False
if ry < n: # ์ค๋ฅธ์ชฝ ๋๊ฐ์
if chess[x][ry]:
return False
return True
def bt(idx=0):
nonlocal answer
if idx == n: # ์ฒด์ค๋ฅผ ๋ง์ง๋ง์นธ๊น์ง ๋๋๋ฐ ์ฑ๊ณตํ ๊ฒฝ์ฐ
answer += 1
return
for i in range(n):
if visited[i] == 0: # ์ธ๋ก ์นธ์ ๋ ๋ง์ด ์๋ ๊ฒฝ์ฐ
if check(idx, i): # ๋๊ฐ์ ๋ฐฉํฅ ์ฒดํฌ
chess[idx][i] = 1 # ์ฒด์คํ์ ๋ง์ ๋๊ณ
visited[i] = 1 # ์ด์ i ์นธ(์ธ๋ก ์ ์ฒด)๋ ๋ง์ ๋ชป๋๋ค.
bt(idx + 1)
chess[idx][i] = 0
visited[i] = 0
bt()
return answer
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค
๋งํฌ: programmers.co.kr/learn/courses/30/lessons/12952?language=python3
๋ฌธ์ ์ค๋ช
๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๊ฐ n์ธ ์ ์ฌ๊ฐํ์ผ๋ก๋ ์ฒด์คํ์ด ์์ต๋๋ค. ์ฒด์คํ ์์ n๊ฐ์ ํธ์ด ์๋ก๋ฅผ ๊ณต๊ฒฉํ ์ ์๋๋ก ๋ฐฐ์นํ๊ณ ์ถ์ต๋๋ค.
์๋ฅผ ๋ค์ด์ n์ด 4์ธ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ํธ์ ๋ฐฐ์นํ๋ฉด n๊ฐ์ ํธ์ ์๋ก๋ฅผ ํ๋ฒ์ ๊ณต๊ฒฉ ํ ์ ์์ต๋๋ค.
์ฒด์คํ์ ๊ฐ๋ก ์ธ๋ก์ ์ธ๋ก์ ๊ธธ์ด n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, n๊ฐ์ ํธ์ด ์กฐ๊ฑด์ ๋ง์กฑ ํ๋๋ก ๋ฐฐ์นํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ฅผ returnํ๋ solutionํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ํธ(Queen)์ ๊ฐ๋ก, ์ธ๋ก, ๋๊ฐ์ ์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
- n์ 12์ดํ์ ์์ฐ์ ์ ๋๋ค.
์ ์ถ๋ ฅ ์
nresult
4 | 2 |
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๋จ์ด ํผ์ฆ(2017 ํ์คํ์ด) (0) | 2020.09.14 |
---|---|
[python] ํ๋ก๊ทธ๋๋จธ์ค - ์ง๊ฒ๋ค๋ฆฌ (4) | 2020.09.13 |
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๋๋์ง (0) | 2020.09.12 |
[python] ํ๋ก๊ทธ๋๋จธ์ค - ์ฌํ๊ฒฝ๋ก (0) | 2020.09.12 |
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๋ฌด์ง์ ๋จน๋ฐฉ ๋ผ์ด๋ธ(2019 KAKAO BLIND RECRUITMENT) (0) | 2020.09.11 |