티스토리 뷰
title: "가장 먼 노드"
category: 프로그래머스[Level-3]
tags: [C++, JavaScript, 프로그래머스]
date: "2021-02-05"
문제 링크
C++
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;
int solution(int n, vector<vector<int>> edge) {
int answer = 0;
// init
map<int, vector<int>> node;
for(int i=0; i<edge.size(); i++){
node[edge[i][0]].push_back(edge[i][1]);
node[edge[i][1]].push_back(edge[i][0]);
}
vector<bool> visited(n+1, false); // 방문 여부
vector<int> dist(n+1, 0); // 거리
queue<int> q;
// 1 방문
visited[1]=true;
for(int i=0; i<node[1].size(); i++){
visited[node[1][i]]=true; // 방문 체크
q.push(node[1][i]);
dist[node[1][i]]=1; // 1과의 거리: 1
}
// BFS
while(!q.empty()){
int front=q.front();
q.pop();
for(int i=0; i<node[front].size(); i++){
if(!visited[node[front][i]]){
visited[node[front][i]]=true;
q.push(node[front][i]);
dist[node[front][i]]=dist[front]+1;
}
}
}
// 거리 최대
int maxDist=*max_element(dist.begin(), dist.end());
for(int e: dist){
if(e==maxDist) answer++;
}
return answer;
}
JavaScript
function solution(n, edge) {
var answer = 0;
const adjList = []; // 인접 리스트
for (let i = 0; i < n + 1; i++) {
adjList.push([]);
}
edge.forEach((v) => {
const x = v[0];
const y = v[1];
adjList[x].push(y);
adjList[y].push(x);
});
const queue = [];
const dist = Array.from({ length: n + 1 }, () => 0);
const visited = Array.from({ length: n + 1 }, () => false);
// 1 방문
visited[1] = true;
for (let i = 0; i < adjList[1].length; i++) {
const num = adjList[1][i];
visited[num] = true;
queue.push(num);
dist[num] = 1;
}
// 나머지 방문(BFS)
while (queue.length > 0) {
const front = queue[0];
queue.shift(); // pop
for (let i = 0; i < adjList[front].length; i++) {
const num = adjList[front][i];
if (!visited[num]) {
visited[num] = true;
queue.push(num);
dist[num] = dist[front] + 1;
}
}
}
// 가장 먼 노드
const maxDist = Math.max(...dist);
dist.forEach((v) => {
if (v === maxDist) answer++;
});
return answer;
}
728x90
반응형
'Programmers Solutions > Level-3' 카테고리의 다른 글
[프로그래머스] 단어 변환 (0) | 2021.02.06 |
---|---|
[프로그래머스] 단속카메라 (0) | 2021.02.06 |
[프로그래머스] 디스크 컨트롤러 (0) | 2021.02.05 |
[프로그래머스] 자물쇠와 열쇠 (0) | 2021.02.05 |
[프로그래머스] 네트워크 (0) | 2021.02.05 |
댓글