[그래프] 가장 먼 노드

yyeahh·2020년 9월 19일
0

프로그래머스

목록 보기
25/35

|| 문제설명 ||

  1. n개의 노드가 있는 그래프가 있다.
  2. 각 노드는 1부터 n까지 번호가 적혀있고, 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 한다. (가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미)
  3. 1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return 하도록 solution 함수를 작성하라.
  • n : 노드의 개수
  • edge : 간선에 대한 정보가 담긴 2차원 배열
_ 노드의 개수 (n) : 2 이상 20,000 이하
_ 간선 : 양방향, 총 1개 이상 50,000개 이하의 간선
_ edge 배열 각 행 [a, b] : a번 노드와 b번 노드 사이의 간선

|| 문제해결방법 ||

- 양방향 : [a, b], [b, a] 모두 그래프에 포함

|| 코드 ||

[2020.09.19] 성공
#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(int n, vector<vector<int>> edge) {
    vector<vector<bool>> g(n+1, vector<bool>(n+1, false));
    vector<bool> chk(n+1,true);
    vector<int> cnt(n+1, 0);
    queue<int> q;
    int max = 0, answer = 0;
    
    for(int i = 0; i < edge.size(); i++) {
        g[edge[i][0]][edge[i][1]] = g[edge[i][1]][edge[i][0]] = true;
    }
    q.push(1); chk[1] = false; chk[1]=1;
    while(!q.empty()) {
        for(int i = 1; i <= n; i++) {
            if(chk[i] && g[q.front()][i]) {
                g[q.front()][i] = g[i][q.front()] = chk[i]= false;
                q.push(i);
                max = cnt[i] = cnt[q.front()] + 1;
            }
        }
        q.pop();
    }
    for(int i=1; i<=n; i++)
        if(max == cnt[i]) answer++;
    return answer;
}

0개의 댓글