Power Grid Maintenance - Leetcode 3607 - Python
- 문제는
C개의 노드(스테이션)와 edges로 구성된 전력망을 유지보수하는 것으로, 노드는 1부터 C까지의 ID를 가집니다. 💡
- 두 가지 유형의 쿼리가 있습니다:
[2, node_id]는 노드를 오프라인으로 전환하고, [1, node_id]는 노드의 상태를 묻거나 연결된 구성 요소 내에서 가장 작은 온라인 노드를 찾습니다. ❓
- "전력망(power grid)"은 그래프의 연결된 구성 요소(connected component)를 의미하며, 이는 노드들이 직간접적으로 연결되어 있음을 나타냅니다. 🌐
- 단순히 각 쿼리마다 연결된 구성 요소를 순회(DFS/BFS)하여 가장 작은 온라인 노드를 찾는 방식은 비효율적입니다(O(Q*C)). 🐢
- 효율적인 해결을 위해 인접 리스트, 온라인 상태를 추적하는 해시 세트, 스테이션의 그룹 ID를 매핑하는 해시 맵, 그리고 각 그룹 ID에 대한 최소 힙(min-heap)을 사용합니다. 🛠️
- 노드가 오프라인이 될 때, 최소 힙에서는 즉시 제거하지 않고
online 해시 세트에서만 제거하는 "지연 삭제(lazy deletion)" 전략을 사용합니다. 😴
- 쿼리 시 최소 힙에서 가장 작은 값을 가져오되, 해당 값이
online 해시 세트에 없는 경우 계속해서 힙에서 제거하며 다음 최소값을 찾습니다. 🔄
- 초기 설정 시 DFS를 사용하여 모든 연결된 구성 요소를 식별하고, 각 스테이션에 그룹 ID를 할당하며, 해당 그룹의 최소 힙을 채웁니다. 🚀
- 이러한 최적화된 접근 방식은 쿼리 시간을 O(log C) 또는 최악의 경우 O(C log C)로 크게 줄여, 전체적인 효율성을 향상시킵니다. ⚡
데브허브 | DEVHUB | Power Grid Maintenance - Leetcode 3607 - Python