Skip to content

Commit

Permalink
Merge pull request #177 from AlgoLeadMe/3-mjj111
Browse files Browse the repository at this point in the history
3-mjj111
  • Loading branch information
mjj111 authored May 31, 2024
2 parents 91d98fd + 5b78936 commit b3d087d
Showing 1 changed file with 78 additions and 0 deletions.
78 changes: 78 additions & 0 deletions mjj111/DonutWithGraph.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// 3μ‹œ 13λΆ„ μ‹œμž‘ 3μ‹œ 54λΆ„ μ™„λ£Œ μ•½ 40λΆ„ μ†Œμš”
// 정점 도넛 λ§‰λŒ€ 8자 κ·Έλž˜ν”„ λ°˜ν™˜
// 정점 개수 100만개
import java.util.*;
class DonutWithGraph {
public int[] solution(int[][] edges) {
Map<Integer, Node> nodes = new HashMap<>();

for(int[] edge : edges) {
int start = edge[0];
int end = edge[1];

Node startNode;
if(!nodes.containsKey(start)) {
nodes.put(start, new Node(0,0));
}
startNode = nodes.get(start);

Node endNode;
if(!nodes.containsKey(end)) {
nodes.put(end, new Node(0,0));
}
endNode = nodes.get(end);

endNode.indegree++;
startNode.next++;
startNode.nexts.add(end);
}

int middleNodeIndex = 0;
int total = 0;
int eight = 0;
int line = 0;
int donut = 0;
int wannaRemove = 0;
for(Integer nodeIndex : nodes.keySet()) {
Node now = nodes.get(nodeIndex);
if(now.indegree == 0 && now.next >= 2) {
middleNodeIndex = nodeIndex;
total = now.next;

wannaRemove = nodeIndex;

for(int next : now.nexts) {
nodes.get(next).indegree--;
}
}
}
nodes.remove(wannaRemove);

for(int nodeIndex : nodes.keySet()) {
Node now = nodes.get(nodeIndex);
if(now.indegree == 0) {
line++;
}
if(now.indegree == 2 && now.next == 2) {
eight++;
}
}

donut = total - eight - line;
// 정점 도넛 λ§‰λŒ€ 8자 κ·Έλž˜ν”„ λ°˜ν™˜
int[] answer = new int[]{middleNodeIndex,donut, line, eight};
return answer;
}

class Node {
int indegree;
int next;
ArrayList<Integer> nexts = new ArrayList<>();

Node(int indegree, int next) {
this.indegree = indegree;
this.next = next;
}
}
}

0 comments on commit b3d087d

Please sign in to comment.