일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- deep
- 상태 끌어올리기
- javascript
- react
- 백준
- 요청
- programmers
- 유용한 사이트
- 가상 DOM
- 상태
- Java
- LeetCode
- 개발
- axios
- Hook
- Dive
- virtual Dom
- State
- 프로그래머스
- DoM
- 프로젝트
- API
- 꿀팁
- EventListener
- 원리
- BOJ
- memory
Archives
- Today
- Total
탄탄한 기본기!
프로그래머스 - 가장 먼 노드 본문
Programmers - 가장 먼 노드
코딩테스트 연습 - 가장 먼 노드
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번 노드 사이에 간선이 있다는 의미입니다.

문제 풀이
처음에는 무슨 문제인지 이해를 잘 못했는데, 알고보니 그냥 bfs를 통해서 가장 멀리 있는 노드의 거리를 구하고 그 거리만큼의 노드의 개수를 구하면 되는 문제였다.
이때까지 항상 python으로만 문제를 풀다가 자바스크립트로 푸니까 queue를 어떻게 사용해야 할지 고민을 했는데, 일단 노드의 최대 개수가 20,000개 이고, 간선의 최대 개수가 50,000개 이기 때문에 shift()를 사용하긴 했다. 하지만 이 메서드는 시간 복잡도가 O(n)이라고 하니 다음부터는 queue를 직접 구현해서 사용하는 방식으로 진행해야겠다고 생각했다.
function solution(n, edge) {
const q = [];
const visited = Array.from(new Array(n+1), ()=>false);
const edges = Array.from(new Array(n+1), ()=>[]);
const dists = Array.from(new Array(n+1), ()=>0);
// 간선들의 정보드들을 이용해 그래프를 구성해줌
edge.forEach((x)=>{
edges[x[0]].push(x[1]);
edges[x[1]].push(x[0]);
});
q.push(1);
visited[1] = true;
while(q.length){
const curNode = q.shift();
// 최대 거리를 알기 위해서 bfs로 dists를 초기화해줌
edges[curNode].forEach(x=>{
if(visited[x]) return;
q.push(x);
visited[x] = true;
dists[x] = dists[curNode] + 1;
});
}
// 최대 거리를 구해주고 reduce 메서드를 통해서 해당 거리만큼의 노드 개수를 구해줌
const maxDist = Math.max(...dists, 0);
return dists.reduce((p, c) => c === maxDist ? p + 1 : p,0);
}
결과

'코딩 테스트 준비 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 네트워크 (0) | 2021.06.19 |
---|---|
프로그래머스 - 짝지어 제거하기 (0) | 2021.06.19 |
Comments