😀요점
- 간선 잇기.
입력 간선
, 출력 간선
, 노드의 값
표시
- 전체
노드
를 1회 순회하며 그래프 수 조회
- 시작 정점 출력 간선의 수 = 모든 그래프의 수
3-1. 출력 간선 0개 = 막대 그래프
3-2. 출력 간선 1개 = 신경X
타 그래프의 연결점
3-3. 출력 간선 2개 = (시작 정점
| 8자 그래프
)
3-3-1. 입력 간선 1개 이상 = 8자 그래프
3-3-2. 입력 간선 0개 = 시작 정점
3-4. 출력 간선 2개 이상 = 시작 정점
- 도넛 그래프의 수 = 시작 정점 출력 간선 수 - 다른 그래프의 수
😎풀이
function solution(edges) {
let start = null
let bar = 0
let donut = 0
let character8 = 0
const graph = []
for (const [from, to] of edges) {
if (!graph[from]) {
graph[from] = {
from: [],
to: [to],
val: from
}
} else graph[from].to.push(to)
if (!graph[to]) {
graph[to] = {
from: [from],
to: [],
val: to
}
} else graph[to].from.push(from)
}
graph.shift()
for(const node of graph) {
const toLen = node.to.length
const fromLen = node.from.length
if(toLen === 0) bar++
else if(toLen === 2) {
if(fromLen > 0) character8++
else start = node
}
else if(toLen >= 2) start = node
}
donut = start.to.length - bar - character8
return [start.val, donut, bar, character8]
}