n-Queens 알고리즘은 n*n 체스판에서 Queen이 다른 체스말을 공격하지 못하도록 배치하는 방법의 수를 구하는 알고리즘입니다.
(Queen은 상하좌우로 자유롭게 거리에 상관없이 움직일 수 있습니다.)
(Queen은 대각선으로 자유롭게 거리에 상관없이 움직일 수 있습니다.)

image.png

배치하는 방법의 수를 구하기 앞서,
코드스테이츠에서 미리 만들어주신 코드를 바탕으로 구현하게 되었습니다.

먼저, 체스판을 만들기 위해 Board객체를 정의하고, 그 안에 여러 함수를 만들었습니다. Board 체스판을 만들기위해 new 키워드를 이용해 생성을 하고, 초기화 함수를 이용해 초기화하였습니다.

1. Board 객체는 n*n인 2차원배열을(matrix) 이용합니다.
2. - 체스판 위에 퀸이 존재하면, 1로 할당하고,
   - 퀸이 존재하지 않으면, 0으로 할당합니다.
3. 공격을 할 수 있는지 여부를 판단합니다.
  - 만약, 공격을 한다면 Conflict를 true로 설정해, 
  퀸을 다른 자리(옆 자리)로 옮겨줍니다. (1->0 으로 바꾸고, 옆 자리(element)를 0->1로 바꿔줍니다.)
  - 공격을 하지 않는다면, Conflict를 false로 설정해,
  다음 줄로 넘어갑니다.(rowIndex++)
=> 미리 만들어둔 메서드를 이용할 수 있습니다.
=> 재귀를 활용할 수 있습니다.
4. 모든 경우의 수를 세어줍니다.
5. 경우의 수를 반환합니다.
n-Queens 알고리즘은 🌲트리 구조를 이용해 탐색을 합니다.
먼저 한 지점을 결정하고, 그 밑에 생기는 경우의 수를 탐색합니다. 
우선 끝까지(모든 rows) 탐색을 한 후에,(==> DFS, 깊이 우선 탐색)
다른 경우를 탐색하기 위해 이전으로 되돌아 오는 방법을 사용합니다.(=> backTracking 되돌아오기 기법)
===> 따라서 모든 경우의 수를 탐색해보고, 원하는 특정한 경우를 찾아낼 수 있습니다.

image.png