2021. 5. 16. 00:49ใ๐ฑ Algorithm/Else
๋ฌธ์ ์ค๋ช
๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๊ฐ n์ธ ์ ์ฌ๊ฐํ์ผ๋ก๋ ์ฒด์คํ์ด ์์ต๋๋ค. ์ฒด์คํ ์์ n๊ฐ์ ํธ์ด ์๋ก๋ฅผ ๊ณต๊ฒฉํ ์ ์๋๋ก ๋ฐฐ์นํ๊ณ ์ถ์ต๋๋ค.
์๋ฅผ ๋ค์ด์ n์ด 4์ธ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ํธ์ ๋ฐฐ์นํ๋ฉด n๊ฐ์ ํธ์ ์๋ก๋ฅผ ํ๋ฒ์ ๊ณต๊ฒฉ ํ ์ ์์ต๋๋ค.
์ฒด์คํ์ ๊ฐ๋ก ์ธ๋ก์ ์ธ๋ก์ ๊ธธ์ด n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, n๊ฐ์ ํธ์ด ์กฐ๊ฑด์ ๋ง์กฑ ํ๋๋ก ๋ฐฐ์นํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ฅผ returnํ๋ solutionํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ํธ(Queen)์ ๊ฐ๋ก, ์ธ๋ก, ๋๊ฐ์ ์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
- n์ 12์ดํ์ ์์ฐ์ ์ ๋๋ค.
์ ์ถ๋ ฅ ์
n | result |
4 | 2 |
์ ๊ทผ
- N-Queen์ ์ ์ผํ ๋ฐฑํธ๋ํน ๋ฌธ์ ์ ํด๋น
- ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ count ํ๋ฉด์, ํ์์๋ ๋ถ๋ถ์ ๊ฐ์ง์น๊ธฐํ๋ค.
- ๋ฐฑํธ๋ํน์ n์ด ์์ ๋(๋ฌธ์ ์กฐ๊ฑด: n <= 12) or ์ด์ฉ ์ ์์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด์ผ ํ ๋ ์ฌ์ฉํ๋ค.
=> ๋ฐฑํธ๋ํน์ ์ฌ๊ท ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
๊ตฌํ๊ณ ์ ํ๋ ๊ฒ
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ์ ์ != ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฒด์คํ์ ํํ
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฒด์คํ์ ํํ๊ฐ ์ด๋ค ๋ชจ์ต์ธ์ง ๊ตฌํ ํ์๊ฐ ์๋ค ==> ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ์ ์๋ง ์นด์ดํธํ์ฌ return
ํ์ด ์ฝ๋
def solution(n: int):
return search([0] * n, 0)
def search(queen: list, row: int):
n = len(queen)
count = 0
if n == row:
return 1
for col in range(n):
queen[row] = col
if check(queen, row):
count += search(queen, row + 1)
return count
def check(queen: list, row: int):
for i in range(row):
if queen[i] == queen[row] or abs(queen[i] - queen[row]) == row - i:
return False
return True
search() ํจ์: ์ฌ๊ท ๊ตฌ์กฐ๋ก ์์ฑ
์ธ์: ๊ฐ row์ ํด๋น๋๋ queen ๋ณ์: list , ๊ฐ row์ ๋ฒํธ (0, 1, 2 ... n )
# ์ฌ๊ท ํจ์ => ํ์ถ๊ตฌ๊ฐ ์์ด์ผํ๋ค. (if n == row)
def search(queen, row):
n = len(queen)
count = 0
if n == row:
return 1
for col in range(n):
queen[row] = col # row, col ์์ญ์ ํธ์ ๋ฐฐ์น
if check(queen, row):
count += search(queen, row + 1) # ๋ค์ ์ด๋ก ํธ์ ๋๊ธด๋ค.
return count # ๋ฐฐ์นํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด
check() ํจ์
def check(queen, row):
for i in range(row):
if queen[i] == queen[row] or abs(queen[i] - queen[row]) == row - i:
return False
return True
์ ๊ทธ๋ฆผ์์ ๋ณด๋ฏ, row - i ์ queen[row] - queen[i] ์ ๊ฐ์ด ๊ฐ๋ค๋ ๊ฒ์ ๋์ผ ๋๊ฐ์ ์์ ์์์ ๋ปํ๋ค.
queen[i] == queen[row] ๊ฐ ๋ปํ๋ ๋ฐ๋, ํ๋์ ํ์์ ๊ฐ์ ์ด์ ์์นํจ์ ์๋ฏธ.
์ฆ ์์ ๋ ์กฐ๊ฑด ์ค ํ๋๋ฅผ ๋ง์กฑํ๋ฉด false๋ฅผ return
'๐ฑ Algorithm > Else' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค [lv1] ๋ก๋์์ต๊ณ ์์์์ต์ ์์ ํ์ด์ฌ (0) | 2021.05.18 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ๊ฐ๋ก๋ฑ ํ์ด์ฌ (0) | 2021.05.16 |
ํ๋ก๊ทธ๋๋จธ์ค [lv2] ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ ํ์ด์ฌ (0) | 2021.05.15 |
ํ๋ก๊ทธ๋๋จธ์ค [lv2] ๊ดํธ๋ณํ ํ์ด์ฌ (0) | 2021.04.25 |
ํ๋ก๊ทธ๋๋จธ์ค [lv3] ๋คํธ์ํฌ ํ์ด์ฌ (0) | 2021.04.25 |