공부혜옹

[Javascript] 알고리즘 reduce와 concat을 활용한 그래프관계 구현 본문

공부합시다/JavaScript

[Javascript] 알고리즘 reduce와 concat을 활용한 그래프관계 구현

Blair06 2022. 11. 3. 22:36

c++로 주로 알고리즘을 풀었기 떄문에 그래프 문제가 나오면 vector를 사용하여 풀었는데 js는 다양한 풀이방법이 많은것 같다.

js로 풀이할땐 주로 객체에 삼항연산자를 사용하여 key와 value가 이미 있는지 체크하고 넣어주는 식으로 풀었는데 이에 더하여 concat과 reduce를 활용하여 푼 풀이가 있어서 공부해보았다

const edge = [
  [3, 6],
  [4, 3],
  [3, 2],
  [1, 3],
  [1, 2],
  [2, 4],
  [5, 2],
];

const nodeObj = edge.reduce((Graph, [from, to]) => {
    Graph[from] = (Graph[from] || []).concat(to);
    Graph[to] = (Graph[to] || []).concat(from);
    return Graph;
  }, {});
  
console.log(nodeObj);
  • reduce함수의 initial value는 {}이다
  • callback 함수의 parameter Graph는 accumulator  이다. 계속해서 이전의 값에서 새로운 값들을 함께 저장한다
  • callback 함수의 parameter [from,to]는 현재 값이다. 해당 코드에선 인덱스0,1값을 from, to라고 지정해놓았지만 arr과 같은 parameter로 지정한 뒤 arr[0], arr[1]이렇게 사용하는것도 가능하다
  • (Graph[from] || []).concat(to); Graph[from]의 값이 이미 있을시 concat을 사용해 기존값과 새로운 to 값을 합쳐 저장한다
  • 기존값이 없을시 빈 배열에 새로운값 to를 합쳐 저장한다

console 결과

{
  '1': [ 3, 2 ],
  '2': [ 3, 1, 4, 5 ],
  '3': [ 6, 4, 2, 1 ],
  '4': [ 3, 2 ],
  '5': [ 2 ],
  '6': [ 3 ]
}
반응형
Comments