์ด ๊ธ์ @longroadhome๋์ ๊ฒ์๊ธ์ ์ฐธ๊ณ ํ์ฌ ํ์ด๋ ๊ธ ์ ๋๋ค.
๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๊ฐ n
์ธ ์ ์ฌ๊ฐํ์ผ๋ก๋ ์ฒด์คํ์ด ์์ต๋๋ค. ์ฒด์คํ ์์ n
๊ฐ์ ํธ์ด ์๋ก๋ฅผ ๊ณต๊ฒฉํ ์ ์๋๋ก ๋ฐฐ์นํ๊ณ ์ถ์ต๋๋ค.
์๋ฅผ ๋ค์ด์ n
์ด 4์ธ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ํธ์ ๋ฐฐ์นํ๋ฉด n
๊ฐ์ ํธ์ ์๋ก๋ฅผ ํ๋ฒ์ ๊ณต๊ฒฉ ํ ์ ์์ต๋๋ค.
์ฒด์คํ์ ๊ฐ๋ก ์ธ๋ก์ ์ธ๋ก์ ๊ธธ์ด n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, n
๊ฐ์ ํธ์ด ์กฐ๊ฑด์ ๋ง์กฑ ํ๋๋ก ๋ฐฐ์นํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ฅผ returnํ๋ solutionํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
n
์ 12์ดํ์ ์์ฐ์ ์
๋๋ค.n | result |
---|---|
4 | 2 |
์ ์ถ๋ ฅ ์ #1
function solution(n) {
// ์กฐ๊ฑด์ ๋ง์กฑํ๋๋ก ๋ฐฐ์นํ ์ ์๋ ๊ฒฝ์ฐ์ ์
let result = 0
// dfs์๊ณ ๋ฆฌ์ฆ
function dfs(board, row) {
// ๋ง์ง๋ง ํ๊น์ง ๋๋ฌํ ๊ฒฝ์ฐ ๊ฒฝ์ฐ์ ์ ++
if(row === n) result++
else {
for(let i = 1 ; i <= n ; i ++) {
// ๋ค์ ํ์ ์๋ฅผ ์ถ๊ฐํ๊ณ ์ ํจ๊ฐ์ธ์ง ๊ฒ์ฌ
board[row+1] = i
if(isValid(board, row+1)) dfs(board, row+1)
}
}
}
// ํธ์ ์์น๊ฐ ์ ํจํ์ง ๊ฒ์ฌ
function isValid(board, row) {
for(let i = 1 ; i < row ; i ++) {
// ํธ๋ผ๋ฆฌ ๋ฒํธ๊ฐ ๊ฒน์น๋ค๋ฉด false ๋ฐํ
if(board[i] === board[row]) return false
// ํธ๋ผ๋ฆฌ ๊ธฐ์ธ๊ธฐ๊ฐ ๊ฐ๋ค๋ฉด ๊ฐ์ ๋๊ฐ์ ๊ฒฝ๋ก์ ์๋๊ฒ์ด๊ธฐ ๋๋ฌธ์ false ๋ฐํ
if(Math.abs(board[i] - board[row]) === Math.abs(i-row)) return false
}
return true
}
for(let i = 1 ; i <= n ; i ++) {
// ํธ์๋ฅผ ์ํด ๋ฐฐ์ด์ 1๋ถํฐ ์์ํ๋๋ก n+1์ ๊ธธ์ด์ ๋ฐฐ์ด ์์ฑ
const board = new Array(n+1).fill()
board[1] = i
dfs(board, 1)
}
return result
}