doryeongpark   5년 전

Step 1. BFS로 각 섬들에 번호를 매긴다.

Step 2. Brute Force로 두 지역을 선택하여(물가와 닿아있는지 체크, 서로 다른대륙인지 체크) BFS를 돌려 최단거리 저장

Step 3. 저장된 총 최단거리중에 가장 작은 것을 선택한다.

이런식으로 생각하고 짰습니다. 시간초과가 뜨는데 어떻게하면 해결할 수 있을까요? 


djm03178   5년 전

대략적인 시간복잡도를 분석해 보면,

  • 두 지점을 뽑는 경우의 수: O((RC)^2) ~= 1억
  • 각 경우마다 BFS: O(RC) ~= 1만

곱하면 1조 정도가 되고, 실제로는 상수가 매우 작을 것이므로 이보다는 작지만, 여전히 5초 안에 들어오기에는 무리일 것입니다.

이렇게 바꿔보세요. 한 지점을 뽑고, 그 지점에서 BFS를 수행하면 가장 먼저 닿는 다른 섬이 어디인지는 자연스럽게 알아낼 수 있습니다. 굳이 그 종착점이 어디인지까지 정해놓고 BFS를 할 필요가 있을까요?

doryeongpark   5년 전

답변 감사드립니다. 참고해서 다시 짜볼게요!

ine   2년 전

감사합니다. 조언해주신대로 코드 고쳤더니 통과했네요!

배우고 갑니다.

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