블로그 메뉴

    Tonkatsu
    Developer Lee
    Tonkatsu
    전체 방문자
    오늘
    어제
    • 분류 전체보기 (52)
      • Frontend (7)
        • React (3)
        • JavaScript (3)
        • HTML\CSS (1)
        • etc (0)
      • Backend (0)
        • Python\Django (0)
        • etc (0)
      • CS (32)
        • Algorithm\Coding Test (19)
        • Computer Science (8)
        • devops (5)
        • etc (0)
      • Languages (5)
        • Javascript (5)
        • Python (0)
        • etc (0)
      • 비상다반 (3)
      • 학원 (4)

    인기 글

    태그

    • 네트워크
    • 리트코드
    • leetcode
    • 코테
    • HTML
    • 프론트엔드
    • merge
    • js
    • fetch
    • CSS
    • BFS
    • Push
    • Git
    • DFS
    • 프로그래머스
    • 백준
    • CS
    • javascript
    • 코딩테스트
    • 자바스크립트

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Tonkatsu

    Developer Lee

    프로그래머스 : 가장 먼 노드 - javascript
    CS/Algorithm\Coding Test

    프로그래머스 : 가장 먼 노드 - javascript

    2022. 1. 18. 14:02

     

    https://programmers.co.kr/learn/courses/30/lessons/49189

     

    코딩테스트 연습 - 가장 먼 노드

    6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3

    programmers.co.kr

     

    문제 설명

    더보기

    문제 설명

    n개의 노드가 있는 그래프가 있습니다. 각 노드는 1부터 n까지 번호가 적혀있습니다. 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 합니다. 가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미합니다.

    노드의 개수 n, 간선에 대한 정보가 담긴 2차원 배열 vertex가 매개변수로 주어질 때, 1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return 하도록 solution 함수를 작성해주세요.

    제한사항
    • 노드의 개수 n은 2 이상 20,000 이하입니다.
    • 간선은 양방향이며 총 1개 이상 50,000개 이하의 간선이 있습니다.
    • vertex 배열 각 행 [a, b]는 a번 노드와 b번 노드 사이에 간선이 있다는 의미입니다.
    입출력 예
    n vertex return
    6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3

     

    문제 풀이

     

    function solution(n, edge) {
      const graph = edge.reduce((G, [from, to]) => {
        G[from] = (G[from] || []).concat(to);
        G[to] = (G[to] || []).concat(from);
        return G;
      }, {});
    
      let needVisit = [1];
      const answer = [[1]];
      const visit = [];
    
      while (needVisit.length) {
        let node = [...needVisit];
        needVisit = [];
        for (let i of node) {
          if (visit.indexOf(i) === -1) {
            visit.push(i);
            for (let j of graph[i]) {
              if (visit.indexOf(j) === -1 && node.indexOf(j) === -1) {
                needVisit.push(j);
              }
            }
          }
        }
        answer.push(needVisit);
      }
      return Array.from(new Set(answer[answer.length - 2])).length;
    }

    BFS를 이용한 문제이다.

    객체로 이루어진 그래프를 만들고 탐색하면 된다.

    가장 마지막에 탐색된 노드들이 가장 먼 노드이기 때문에 마지막 노드들의 수를 리턴하면 된다.

     

    for문을 3개나 사용하였는데, 마지막 for문은 중복을 최대한 줄이기 위해서 사용한 반복문이다.

    따라서 없어도 작동은 잘 한다.

    저작자표시 (새창열림)

    'CS > Algorithm\Coding Test' 카테고리의 다른 글

    프로그래머스 : 신고 결과 받기 - javascript  (0) 2022.01.18
    프로그래머스 : 거리두기 확인하기-javascript  (0) 2022.01.04
    LeetCode : 6 - javascript  (0) 2021.12.23
    프로그래머스 : 다리를 지나는 트럭-javascript  (0) 2021.12.22
    프로그래머스 : H-index-javascript  (2) 2021.12.20
      'CS/Algorithm\Coding Test' 카테고리의 다른 글
      • 프로그래머스 : 신고 결과 받기 - javascript
      • 프로그래머스 : 거리두기 확인하기-javascript
      • LeetCode : 6 - javascript
      • 프로그래머스 : 다리를 지나는 트럭-javascript
      Tonkatsu
      Tonkatsu
      한 번 뿐인 인생 편하게 살고싶지만 그러려면 열심히 살아야 되니까 열심히 살려고 노력은 하지만 편하게 사는 사람

      티스토리툴바