sminhyuck   4년 전

코드를 다음과 같이 최대한 적게 돌아가도록 줄여봤는데, 어느 부분때문에 시간초과가 발생하는지 잘모르겠습니다.

시간 초과 나지 않게끔 어느 부분을 어떻게 수정하면 나아질지 조언 부탁드립니다!

시간초과는 시작하고 1%에서 초과가 뜹니다 ㅠㅠ

seojeongwook2   4년 전

일단 불필요한 부분이 조금 있습니다.

  1. oq가 필요없습니다.

굳이 oq에 쌓았다가 q에다가 다시 쌓기보다는 DFS에서 깊이가 증가할 때 마다 배열 하나로 처리하면 oq가 필요없습니다.

for문으로 후보군을 모두 돌아볼 필요없이 골라진 것만 담으면 됩니다. 

2. 시간반환하는 2차원 배열을 사용하기 보다는 BFS에서 시간을 체크해주면 됩니다. 그러면 굳이 2중 for문을 계속 돌릴 필요가 없습니다.

oq를 지워본 코드를 부분적으로 작성했습니다.

sminhyuck   4년 전

답변 감사합니다! 

조언해주신대로 수정을 해봤는데 여전히 시간초과가 뜨네요 ㅜㅜ

일단 search 부분은 어차피 맵복원이 필요해서 하는김에 같이 탐색하는 방식으로 최대한 시간을 줄였습니다.

시간초과가 뜨는 부분이 아무래도 확산 부분에서 알고리즘으로 인해 일어나는것 같은데

어떻게 더 가지치기를 하여야하는지 모르겠습니다..

sminhyuck   4년 전

혹시나 해서 89라인 뒤에 else continue;를 추가하여 시간을 단축시키는 경우에는 테스트케이스는 모두 잘 나오나 틀렸습니다가 뜨네요 ㅠㅠ

sminhyuck   4년 전

문제 해결했습니다 :)

기존에 88라인 쯤에서 큐에 푸시를 한 값을 꺼내서 맵에 표기가 아니라, 푸시할때 같이 표기를 해주니 가지치기가 되어 잘동작하는것 같습니다! 감사합니다:)

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