public int[] solution(int[][] edges) {
int[] answer = new int[4];
Map<Integer, int[]> nodeMap = initializeNodeMap(edges);
int maxNode = getMaxNode(edges);
for (int node = 1; node <= maxNode; node++) {
if (nodeMap.containsKey(node)) {
int[] degrees = nodeMap.get(node);
if (degrees[0] >= 2 && degrees[1] == 0)
answer[0] = node;
else if (degrees[0] == 0)
answer[2]++;
else if (degrees[0] >= 2 && degrees[1] >= 2)
answer[3]++;
}
}
answer[1] = nodeMap.get(answer[0])[0] - (answer[2] + answer[3]);
return answer;
}
private Map<Integer, int[]> initializeNodeMap(int[][] edges) {
Map<Integer, int[]> nodeMap = new HashMap<>();
for (int[] edge : edges) {
int from = edge[0], to = edge[1];
nodeMap.putIfAbsent(from, new int[] { 0, 0 });
nodeMap.putIfAbsent(to, new int[] { 0, 0 });
nodeMap.get(from)[0]++;
nodeMap.get(to)[1]++;
}
return nodeMap;
}
private int getMaxNode(int[][] edges) {
int maxNode = -1;
for (int[] edge : edges) {
maxNode = Math.max(maxNode, Math.max(edge[0], edge[1]));
}
return maxNode;
}
출처:https://school.programmers.co.kr/learn/courses/30/lessons/258711