Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
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
Archives
Today
Total
관리 메뉴

hwooo

프로그래머스 (C/C++) 49189 : 가장 먼 노드 본문

Study/Algorithm

프로그래머스 (C/C++) 49189 : 가장 먼 노드

hwooo 2024. 10. 15. 23:00

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

 

프로그래머스

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

programmers.co.kr

 

 

풀이

BFS로 탐색하여 1번 노드와 가까운 노드부터 순차적으로 탐색.

가장 먼 거리를 maxLev, 해당 거리의 노드의 개수를 maxLevCnt로 저장 후 maxLev과 같은 거리의 노드 개수를 구함


코드

#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(int n, vector<vector<int>> edge) {
    vector<int> graph[20001];
    
    // connect nodes
    for (auto e : edge) {
        graph[e[0]].push_back(e[1]);
        graph[e[1]].push_back(e[0]);
    }
    
    int maxLev = 0, maxLevCnt = 1;
    bool visited[20001];
    queue<pair<int, int>> q;
    
    q.push({1, 1});
    visited[1] = true;
    while (!q.empty()) {
        int now = q.front().first, nowLev = q.front().second;
        q.pop();
        
        // update maxLev Info
        if (nowLev > maxLev) {
            maxLev = nowLev;
            maxLevCnt = 1;
        }
        
        else if (nowLev == maxLev)
            maxLevCnt++;
            
        for (int next : graph[now]) {
            if (visited[next]) continue;
            
            q.push({next, nowLev + 1});
            visited[next] = true;
        }
    }
    return maxLevCnt;
}