check 함수 대신 배열들을 통해 세로와 대각선을 이용한 판정 여부를 체크하게 하면 수행시간 개선을 보실 수 있습니다. 예컨데 column 라는 배열을 만들고 column[c] = true 일 경우 c번째 열에 이미 말이 놓여있음을 알 수 있으니 해당 위치에 포함할 수 있는지를 한번의 참조를 통해 알 수 있습니다. 그리고 대각선의 경우 힌트를 드리자면, 체스판에 대해 각 칸에 대응하는 행번호와 열번호의 합을 각 칸에 넣어보시면 규칙성이 있다는 사실을 아실 수 있습니다.
kingik
java로 작성하였습니다.
줄마다 Nqueen의 조건을 만족하는 위치를 모두 찾아서 그 위치들에 한
해서만 재귀함수를 호출하도록 하였습니다. 예를 들어 10-10 체스판에
서 4번째 행까지는 queen의 위치가 각 행마다 고정되어 있는 상태에서
5번째 행에서 기존에 배치되어 있는 4개의 queen과 서로 공격하지 못
하는 위치를 2개를 찾았을 때, 1번 위치를 지정하고 바로 다음 행
로 넘어가 가능한 위치를 찾거나, 1번위치를 건너뛰고 2번 위치를 지
정하고 다음 행으로 넘어가는 등의 방식으로 최대한 시간을 줄여보았
는데, 결과가 만족스럽지 않아서요.. 더 줄이는 방법 아시는 분 있으
면 답변 부탁드려요 ㅠ
7년 전