Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 일지

1557. Minimum Number of Vertices to Reach All Nodes ( 모든 노드에 도달하기 위한 최소 정점 수) 본문

코딩 테스트/LeetCode

1557. Minimum Number of Vertices to Reach All Nodes ( 모든 노드에 도달하기 위한 최소 정점 수)

포카리tea 2024. 11. 4. 17:36
0에서 n-1 사이의 정점이 있는 방향성 비순환 그래프가 주어지고, edges[i] = [fromi, toi]가 노드 fromi에서 노드 toi로의 방향성 에지를 나타내는 배열 에지가 주어집니다. 그래프의 모든 노드에 도달할 수 있는 가장 작은 정점 집합을 구합니다. 고유한 솔루션이 존재한다는 것이 보장됩니다. 정점은 어떤 순서로든 반환할 수 있습니다.

 

 

예시 1:

입력: n = 6, edges = [[0,1],[0,2],[2,5],[3,4],[4,2]]
출력: [0,3]
설명: 하나의 정점에서 모든 노드에 도달하는 것은 불가능합니다. 0부터 [0,1,2,5]에 도달할 수 있습니다. 3부터 [3,4,2,5]에 도달할 수 있습니다. 그래서 [0,3]을 출력합니다.

 

예시 2:

입력: n = 5, edges = [[0,1],[2,1],[3,1],[1,4],[2,4]]
출력: [0,2,3]
설명: 정점 0, 3, 2는 다른 노드에서 도달할 수 없으므로 정점을 포함해야 합니다. 또한 이러한 정점 중 하나는 노드 1과 4에 도달할 수 있습니다.

 

조건:

  • 2 <= n <= 10^5
  • 1 <= edges.length <= min(10^5, n * (n - 1) / 2)
  • edges[i].length == 2
  • 0 <= fromi, toi< n
  • All pairs (from, to) are distinct.

 

정답:

public class Solution {
    public IList<int> FindSmallestSetOfVertices(int n, IList<IList<int>> edges) {
        HashSet<int> edgeList = new HashSet<int>();
        foreach (var edge in edges)
        {
            edgeList.Add(edge[1]);
        }

        List<int> result = new List<int>();
        for (int i = 0; i < n; i++)
        {
            if (!edgeList.Contains(i))
            {
                result.Add(i);
            }
        }

        return result;
    }
}

해설: 먼저 edges에서 edge[1]번만 edgeList로 추가하여 연결되어있는 숫자를 확인하고 edgeList안에 없는 숫자만 result에 추가하여 return합니다.