문제 출처
1. 문제설명
- 백트래킹에서 굉장히 유명한 문제이다.
- NxN 체스판 위에 퀸 N개를 서로 공격하지 못하게 놓는 경우의 수를 구하라.
- 참고로 퀸은 상,하,좌,우,대각선 방향으로 공격이 가능하다.
2. 알고리즘 설계
- 퀸이 N개가 될 때까지, 체스판의 랜덤한 위치에 놓는다.
- 조건을 만족하면서 N개를 놓았다면 카운팅
3. 로직
- 일반적인 dfs 조합 코드로 놓으면 된다.
- 위치가 맞는지 체크
- x, y 축 중 하나의 값이라도 똑같거나, (상,하,좌,우)
- abs(x-y)가 서로 같거나 (대각선)
- 1차원 배열로 구현 가능
- 한 줄에 하나밖에 놓을 수 없다. (좌, 우 공격 가능)
- 따라서 보드판의 한 행에는 무조건 하나의 퀸만 놓일 수 있다.
4. 전체 코드
5. 소감
- 1차원 배열 풀이는 내가 푼 이후에 다른 사람 코드를 찾아본 것이다.
- 원리는 단순하지만, 저걸 끌어내는 게 정말 대단한 거 같다.