[JavaScript/프로그래머스] 그래프 - 가장 먼 노드

2023. 5. 16. 10:37·Coding Test/Programmers_JavaScript
728x90

문제 링크

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


 

정답 코드

Array.from();
JavaScript ES6에 등장한 문법으로, 이 코드에서는 length에 할당된 길이만큼의 빈 배열을 만드는 데 사용되었습니다.

// edge = [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]]
function solution(n, edge) {
  // graph 배열을 초기화. 각 노드와 그 노드에 연결된 다른 노드들의 정보를 저장할 예정.
  const graph = Array.from({ length: n + 1 }, () => []);
  // graph : [[], [], [], [], [], [], []]

  // distance 배열을 초기화. 각 노드로부터 1번 노드까지의 거리를 저장할 예정.
  const distance = Array(n + 1).fill(-1);
  // distance : [-1, -1, -1, -1, -1, -1, -1]

  // BFS에 사용될 queue. 초기에는 1번 노드만 포함.
  const queue = [1];

  // edge 배열에 있는 모든 간선 정보를 통해 graph를 완성.
  // 양방향 이동이 가능하므로 다음과 같이 input한다
  edge.forEach(([a, b]) => {
    graph[a].push(b);
    graph[b].push(a);
  });
  // graph : [[], [3, 2], [3, 1, 4, 5], [6, 4, 2, 1], [3,2], [2], [3]]

  // BFS 시작. 1번 노드부터 시작하므로, distance[1]을 0으로 설정.
  distance[1] = 0;
  // distance : [-1, 0, -1, -1, -1, -1, -1]

  // BFS 진행.
  while (queue.length) {
    // 현재 방문 중인 노드를 queue에서 꺼냄.
    const current = queue.shift();

    // 현재 노드에 연결된 모든 노드들에 대해
    for (const next of graph[current]) {
      // 그 노드가 아직 방문되지 않았다면 (즉, distance[next]가 -1이라면)
      if (distance[next] === -1) {
        // 그 노드의 distance 값을 현재 노드의 distance 값에 1을 더한 값으로 설정하고
        distance[next] = distance[current] + 1;
        // 그 노드를 queue에 추가.
        queue.push(next);
      }
    }
    console.log(current, distance);
  }

  // distance 배열에서 가장 큰 값 (즉, 1번 노드로부터 가장 먼 거리)를 찾고
  const maxDistance = Math.max(...distance);

  // 이 거리와 같은 거리를 가진 노드들의 수를 반환.
  return distance.filter((d) => d === maxDistance).length;
}

 


End

728x90
저작자표시 비영리 변경금지 (새창열림)

'Coding Test > Programmers_JavaScript' 카테고리의 다른 글

[JavaScript/프로그래머스] 그래프 - 방의 개수  (0) 2023.05.16
[JavaScript/프로그래머스] 그래프 - 순위  (0) 2023.05.16
[JavaScript/프로그래머스] 연습문제 - 덧칠하기  (0) 2023.05.09
[JavaScript/프로그래머스] 연습문제 - 기사단원의 무기  (0) 2023.05.09
[JavaScript/프로그래머스] 연습문제 - 카드 뭉치  (0) 2023.05.08
'Coding Test/Programmers_JavaScript' 카테고리의 다른 글
  • [JavaScript/프로그래머스] 그래프 - 방의 개수
  • [JavaScript/프로그래머스] 그래프 - 순위
  • [JavaScript/프로그래머스] 연습문제 - 덧칠하기
  • [JavaScript/프로그래머스] 연습문제 - 기사단원의 무기
ThreeLight
ThreeLight
ThreeLight Studio의 블로그, TimeMap.exe에 오신 것을 환영합니다.
  • ThreeLight
    TimeMap.exe
    ThreeLight
  • 전체
    오늘
    어제
    • 분류 전체보기 (245)
      • Checkpoint (1)
      • (3D)Dev Deep Dive (0)
        • Templates & Guides (9)
        • Frontend origin (9)
        • Backend origin (1)
        • TroubleShootings (4)
      • Development Study (95)
        • Frontend (36)
        • Backend (21)
        • CS(Computer Science) (2)
        • Background Knowledges (11)
        • Algorithm (2)
        • Mobile (3)
        • AWS (6)
        • Python (6)
        • MSW(MapleStoryWorlds) (8)
      • Coding Test (59)
        • 문제.zip (1)
        • BaekJoon_JavaScript (0)
        • Programmers_JavaScript (9)
        • BaekJoon_Python (23)
        • Programmers_Python (10)
        • Undefined_Python (3)
        • Programmers_SQL (13)
      • 활동내역.zip (43)
        • 개인 (21)
        • Techeer (12)
        • Bootcamp (7)
        • Hackathon (1)
        • TeamProjects (2)
      • 여기 괜찮네??(사이트 | App) (5)
      • 재미있는 주제들 (8)
      • 개발 외 공부 저장소 (11)
        • 생산운영관리 (3)
        • 생활속의금융 (6)
        • 경영정보시스템 (2)
  • 링크

    • TimeMap.dmg (Portfolio)
    • GitHub 바로가기
    • 오픈프로필(카카오톡)
    • Medium 바로가기
    • Disquiet 바로가기
    • LinkedIn 바로가기
  • 인기 글

  • 태그

    JavaScript
    CSS
    Python
    programmers
    Baek Joon
    react
    HTML
    SQL
    프로그래머스
    TypeScript
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
ThreeLight
[JavaScript/프로그래머스] 그래프 - 가장 먼 노드
상단으로

티스토리툴바