https://programmers.co.kr/learn/courses/30/lessons/49189
코딩테스트 연습 - 가장 먼 노드
6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3
programmers.co.kr
bfs를 사용해서 시작 노드 1과 모든 노드 사이의 거리 정보를 distance에 저장
max 함수로 현재까지 탐색한 노드의 거리중 가장 먼 거리의 값을 max_dis에 저장
모든 노드 탐색 후 max_dis와 같은 값을 가진 distance의 요소 개수를 카운트하여 출력
int solution(int n, vector<vector<int>> edge) {
int answer = 0;
queue<int> q; // bfs 구현을 위한 큐
vector<vector<int>> v(n+1); // 간선 정보로 만든 그래프
vector<int> visit(n + 1, 0); // 해당 노드의 방문 여부 (1: 방문, 0: 미방문)
vector<int> distance(n + 1, 0); // 노드 1과 각 노드 i까지의 거리
// ex) distance[3] 은 1에서 3까지 거리: 1
int max_dis=0;
for (int i = 0; i < edge.size();i++) {
v[edge[i][0]].push_back(edge[i][1]);
v[edge[i][1]].push_back(edge[i][0]);
}
visit[1] = 1;
q.push(1);
while (!q.empty()) {
int x = q.front();
q.pop();
for (int i = 0; i < v[x].size();i++) {
if (visit[v[x][i]] != 1) {
distance[v[x][i]] = distance[x] + 1;
visit[v[x][i]] = 1;
q.push(v[x][i]);
max_dis = max(max_dis, distance[v[x][i]]);
}
}
}
for (int i = 1; i <= n;i++) {
if (max_dis == distance[i]) {
answer++;
}
}
return answer;
}
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[프로그래머스] 주차 요금 계산 C++ (0) | 2022.05.12 |
---|---|
[프로그래머스] k진수에서 소수 개수 구하기 C++ (0) | 2022.05.11 |
[프로그래머스] N으로 표현 C++ (DP) (0) | 2022.05.05 |
[프로그래머스] 타겟넘버 C++ (dfs) (0) | 2022.05.05 |
[프로그래머스] 카카오프렌즈 컬러링 북 C++ (dfs) (0) | 2022.05.03 |