- O(|V|^2)이라는 것은 모든 정점에서 모든 정점으로 가는 간선이 있을 수 있을 때 쓰는 말이고, 이 문제에서는 인접 행렬을 만드신 적이 없을 뿐더러 dx와 dy를 통해 각 칸마다 최대 4개의 간선만을 사용하기 때문에 O(4|V|) 정도만을 탐색하면 됩니다.
- 하지만 이 코드에서는 BFS를 한 번만 돌리는 것이 아니라 얼음이 다 녹을 때까지 돌리고, 이 시간은 최대 O(|V|) 회 반복될 수 있습니다. 그래서 약 세제곱이 도는 것이고, 이 방법으로는 시간 초과를 피할 수 없습니다.
매번 얼음을 녹이고 다시 BFS를 하지 않고, 과정을 진행하면서 얼음을 녹이는 방법을 생각해 보세요. 즉, 전체에서 BFS가 딱 한 번만 돌아야 합니다. 또는 union find 등을 사용할 수도 있습니다.
alsgud3229 5년 전
로직: BFS를 통해 백조가 만날 수 있는지를 판단하여 bool로 반환한다 -> 반환이 false라면 얼음을 녹인다
위 과정을 반복하여 백조가 만나게 되는 최소 날짜를 출력했습니다.