sctm1219   2년 전

문제 통과는 했습니다.

하지만 실제로 vscode에서 실행해 보면 13 이상부터는 매우 느리게 답이 출력 됩니다.

어떻게 하면 조금 더 효율적이게 코드를 바꿀 수 있을 까요?

dongwanpianist   1년 전

원래 이 문제는 n==13, n==14, n==15가 될수록 실행시간이 유의미하게 증가하기 때문에

이 문제의 실행시간 상한선이 무려 10초로 설정되어있습니다. dfs를 활용하여 잘 푸셨으니 걱정하지 않으셔도 될 것 같습니다.

눈에 띄는 것만 알려드린다면,

dfs에 함수에 parameter로 사용되는 현재 chess board의 상태(chess& board)는 main에서 선언된 단 하나의 chess board(n*n, false)만 참조하여 사용하기 때문에, 그냥 전역변수에 두고 parameter에서는 빼셔도 됩니다. 동일한 메모리 공간을 사용한다는 "&" 키워드를 통해 chess parameter가 새로운 인스턴스로 복사되지는 않았지만 (만약 복사했으면 영락없이 시간초과), 그래도 parameter에 해당 포인터 값을 전달하기 때문에 수많은 가지치기로 재귀함수를 실행할 때에는 그런거 하나라도 필요 이상의 정보일 수 있습니다.

그것보다 시간절약을 위해 더욱 중요한 것은, 최대 15*15=225개의 보드에 퀸이 있냐 없냐를 vector<bool>을 활용하여 검사하는 것보다, 그냥 최대 15가지의 퀸 위치(x, y좌표)만 저장하여도 됩니다.

댓글을 작성하려면 로그인해야 합니다.