개발 일지
1557. Minimum Number of Vertices to Reach All Nodes ( 모든 노드에 도달하기 위한 최소 정점 수) 본문
코딩 테스트/LeetCode
1557. Minimum Number of Vertices to Reach All Nodes ( 모든 노드에 도달하기 위한 최소 정점 수)
포카리tea 2024. 11. 4. 17:360에서 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합니다.
'코딩 테스트 > LeetCode' 카테고리의 다른 글
2733. Neither Minimum nor Maximum (최소값도 최대값도 아니다) (0) | 2024.11.05 |
---|---|
2231. Largest Number After Digit Swaps by Parity (홀수짝수별 자릿수 스왑 후 가장 큰 수) (0) | 2024.11.04 |
229. Majority Element II (다수 원소 II) (2) | 2024.11.01 |
682. Baseball Game (야구 게임) (3) | 2024.10.31 |
709. To Lower Case (소문자로) (0) | 2024.10.31 |