n queen
TRANSCRIPT
N Queen
Steve Paks
Question
• 체스에서 queen의 가로, 세로, 대각선 방향으로 어느 곳이나 한 번에 움직일 수 있다. 즉 다음과 같은 체스판에서
queen이 X라고 표시된 위치에 있을 때, 그 다음 queen이 움직여 갈수 있는 부분은 어둡게 칠해진 부분 중의 하나이
다.
• N X N 크기의 정방형 체스판이 주어졌다. 우리는 거기에 N개의 queen을 배치하려고 하는데, 모든 queen들은 서로
잡아먹을 수 없어야 한다. 그렇다면 queen들을 어떻게 배치해야만 할까? 가능한 모든 경우의 개수를 출력한다.
• queen의 수 N(1≤N≤13)을 입력 받는다.
• N X N의 체스판에서 N개의 queen들이 서로 잡아먹지 않는 위치로 놓을 수 있는 방법의 수를 출력한다.
• 입력 예
4
• 출력 예
2
• N이 4일 때, 나오는 경우는 두 가지이다.
Algorithm
Algorithm(Cont’d)1
1
1
1
1
1
1
1
1
0
0
2
0
3
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Core methods
• nQueen()– Queen을 하나씩 체스판에 올려보고
– 행을 바꿔가면서 서로 공격하지 못하도록 만드는 패턴을 찾음
• containsRoute(int)– 대각선 또는 직선 위치에 Queen이 있는지 검토