n-1개의 정점들을 한 번씩 방문→원래 출발했던 정점


⇒생성한 정점의 번호와 정점을 생성하기 전 도넛 모양 그래프의 수, 막대 모양 그래프의 수, 8자 모양 그래프의 수?
| edges | result |
|---|---|
| [[2, 3], [4, 3], [1, 1], [2, 1]] | [2, 1, 1, 0] |
| [[4, 11], [1, 12], [8, 3], [12, 7], [4, 2], [7, 11], [4, 8], [9, 6], [10, 11], [6, 10], [3, 5], [11, 1], [5, 3], [11, 9], [3, 8]] | [4, 0, 1, 2] |
edges의 길이 ≤ 1,000,000edges의 원소는 [a,b] 형태이며, a번 정점에서 b번 정점으로 향하는 간선이 있다는 것을 나타냅니다.a, b ≤ 1,000,000import java.util.*;
class Solution {
public int[] solution(int[][] edges) {
Map<Integer, int[]> nodeCount = new HashMap<>();
int[] answer = {0,0,0,0};
Arrays.stream(edges).forEach(edge -> {
int a = edge[0];
int b = edge[1];
if(!nodeCount.containsKey(a))
nodeCount.put(a, new int[]{0,0});
if(!nodeCount.containsKey(b))
nodeCount.put(b, new int[]{0,0});
nodeCount.get(a)[0] += 1; //나가는 간선
nodeCount.get(b)[1] += 1; //들어오는 간선
});
int[] count;
for(int key : nodeCount.keySet()) {
count = nodeCount.get(key);
if(count[0]>=2 && count[1]==0) //정점
answer[0] = key;
else if(count[0]==0 && count[1]>0) //막대 그래프
answer[2]++;
else if(count[0]>=2 && count[1]>=2) //8자 그래프
answer[3]++;
}
answer[1] = nodeCount.get(answer[0])[0] - answer[2] - answer[3]; //도넛 그래프
return answer;
}
}