반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
N개의 노드가 있는 그래프에서
1번 노드에서부터 가장 먼 노드가 몇개 있는지 찾는 문제입니다.
풀이 방법
하나의 노드에서 모든 노드로부터의 최단 경로를 찾는 다익스트라 알고리즘을 이용하면 쉽게 해결할 수 있습니다.
for(auto& e : edge){
v[e[0]].push_back(e[1]);
v[e[1]].push_back(e[0]);
}
입력받은 모든 간선을 양방향 그래프로 만들어주고
void dijkstra()
{
priority_queue<pair<int, int>> q;
q.push({0, 1});
dist[1] = 0;
dist[0] = -1;
while (q.size())
{
auto [cost, node] = q.top(); q.pop();
cost *= -1;
for (int nxt : v[node])
{
if (dist[nxt] > cost + 1)
{
dist[nxt] = cost + 1;
q.push({-(cost+1), nxt});
}
}
}
}
거리를 비교하는 방식으로 최단 거리를 구해줍니다.
int maxDist= 0;
int cnt = 0;
for (int d : dist)
maxDist = max(maxDist, d);
for (int d : dist)
if (d == maxDist)
cnt++;
return cnt;
이 후 거리를 순회하여 가장 먼 거리를 찾고
해당 거리를 가진 노드의 수를 찾아 출력해주면 해결됩니다.
반응형
LIST
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
수레 움직이기 [Lv. 3] (C++) (0) | 2024.06.28 |
---|---|
여행경로 [Lv. 3] (C++) (0) | 2024.06.28 |
아이템 줍기 [Lv. 3] (0) | 2024.06.24 |
단어 변환 [Lv. 3] (0) | 2024.06.23 |
디스크 컨트롤러 [Lv. 3] (0) | 2024.06.21 |