var findCenter = function(edges) {
const hash = edges.reduce((acc, cur) => {
acc[cur[0]] ? acc[cur[0]] += 1 : acc[cur[0]] = 1
acc[cur[1]] ? acc[cur[1]] += 1 : acc[cur[1]] = 1
return acc
}, {})
for(let key in hash) {
if(hash[key] === edges.length) return key
}
}
필자의 접근법은 일단 reduce를 사용해서 각 노드별 엣지의 수를 기록한 hash 객체를 생성하고 for문을 통해 노드 중 가장 많은 엣지를 갖고있는 노드를 리턴하는 방식이다.
var findCenter = function(edges) {
const [[a, b], [c, d]] = edges;
return a === c || a === d ? a : b
}
굉장히 직관적이고 합리적인 해결방법이다.
모든 엣지들을 다 비교할 필요 없이 두 엣지만 비교하면 되는 것이었다. star graph이기 때문에 두 엣지의 공통 노드가 중앙 노드가 된다.
간단하게 구조 분해 할당으로 노드들을 할당한다. 그리고a
가c
나d
와 같으면a
가 중앙 노드가 되고 아니면b
가 된다.