https://school.programmers.co.kr/learn/courses/30/lessons/12952
๋ฌธ์ ์ค๋ช
๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๊ฐ n์ธ ์ ์ฌ๊ฐํ์ผ๋ก๋ ์ฒด์คํ์ด ์์ต๋๋ค. ์ฒด์คํ ์์ n๊ฐ์ ํธ์ด ์๋ก๋ฅผ ๊ณต๊ฒฉํ ์ ์๋๋ก ๋ฐฐ์นํ๊ณ ์ถ์ต๋๋ค.
์๋ฅผ ๋ค์ด์ n์ด 4์ธ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ํธ์ ๋ฐฐ์นํ๋ฉด n๊ฐ์ ํธ์ ์๋ก๋ฅผ ํ๋ฒ์ ๊ณต๊ฒฉ ํ ์ ์์ต๋๋ค.
์ฒด์คํ์ ๊ฐ๋ก ์ธ๋ก์ ์ธ๋ก์ ๊ธธ์ด n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, n๊ฐ์ ํธ์ด ์กฐ๊ฑด์ ๋ง์กฑ ํ๋๋ก ๋ฐฐ์นํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ฅผ returnํ๋ solutionํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๋ด ํ์ด
N-Queen์ ๋ฐฑํธ๋ํน์ ๋ํ์ ์ธ ์์ ๋ผ๊ณ ํ๋ค.
๋ฐฑํธ๋ํน์ ๊ณต๋ถํ๋ฉด์ ๋ค์ ํ์ด๋ดค๋๋ฐ, ์กฐ๊ฑด์ ๋ฐ๋ผ DFS๋ฅผ ์งํํ๋ค๊ฐ ์กฐ๊ฑด์ ๋ง์ง ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ฒ์๋ถํฐ ์กฐ๊ฑด์ ๋ฐ๋ผ DFS๋ฅผ ์งํํ๋ ๋๋์ด์๋ค. ๋ฐฑํธ๋ํน ๊ณต๋ถํ ์ ์์ด ์ข์ ๋ฌธ์ ์๋ค.
#include <string>
#include <vector>
using namespace std;
int N;
int answer = 0;
int queen_col[13]; // 1์ฐจ์ ๋ฐฐ์ด๋ก ํ์
bool check(int row)
{
// ๊ฐ์ ํ, ์ด๊ณผ ๋๊ฐ์ ์์ ๋์ผ ์ ์๋ค.
for(int i = 0; i < row; ++i)
{
if(queen_col[row] == queen_col[i]
|| row-i == abs(queen_col[row]-queen_col[i]))
return false;
}
return true;
}
void nqueen(int row)
{
// ์ด ๊ฐ์์ queen ๊ฐ์ ๊ฐ์ผ๋ฉด ์ฐพ๊ธฐ ์๋ฃ
if(row == N)
{
++answer;
return;
}
for(int i = 0; i < N; ++i)
{
// 1. row ํ, i๋ฒ์งธ ์ด์ queen ๋์๋ณด๊ธฐ
queen_col[row] = i;
// 2. ๊ฒ์ฆํ๊ธฐ
if(check(row))
{
// 3. ๋ค์ ํธ ๋๊ธฐ
nqueen(row+1);
}
}
}
int solution(int n)
{
N = n;
nqueen(0);
return answer;
}
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ํ ์ธ ํ์ฌ(C++) (0) | 2023.08.03 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค]level.3 - ์ธ์ฌ๊ณ ๊ณผ(C++) (1) | 2023.08.01 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - n^2 ๋ฐฐ์ด ์๋ฅด๊ธฐ(C++) (0) | 2023.07.28 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ํ ์ด๋ธ ํด์ ํจ์(C++) (0) | 2023.07.27 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.3 - ๊ฑฐ์ค๋ฆ๋(C++) (0) | 2023.07.25 |