안녕하세요! 오늘도 프로그래머스 문제 가장 먼 노드를 풀어보았습니다.
사실 이 문제는 가중치가 없는 그래프에 최단거리 이야기까지 나왔으니 100% bfs를 이용하면 쉽게 풀 수 있습니다.
bfs의 특징을 이용하면 한단계 한단계씩 다음 노드로 접근하게될거고,
마지막 접근한 노드들만 쭉 찾아서 갯수세주면 바로 해결!
조금 특이한건 bfs탐색을 위한 발견여부 배열에 해당 점을 발견한 당시 거리값을 저장시켰다는 점입니다.
마지막에 거리 최대값을 가진 애들만 쭉 반복문돌리며 갯수 세는식으로 만들기위해 ㅎㅎ.
그럼 오늘도 파이팅입니다!
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(int n, vector<vector<int>> edge) {
//간선이용해 그래프 표현
vector<int> graph[20001];
for(int i=0;i<edge.size();i++){
graph[edge[i][0]].push_back(edge[i][1]);
graph[edge[i][1]].push_back(edge[i][0]);
}
int answer = 0;
queue<pair<int, int>> que;
int discover[20001]={};
que.push({1,0});
discover[1]=1; //bfs를 위한 발견여부 저장
int max = 1;
while(!que.empty()){
pair<int, int> ft = que.front();
que.pop();
for(int i=0;i<graph[ft.first].size();i++){
//연결되있는데 발견한적없었다면
if(discover[graph[ft.first][i]] == 0){
discover[graph[ft.first][i]] = ft.second+1; //발견처리하고
que.push({graph[ft.first][i], ft.second+1}); //탐색위해 큐에 푸시
if(max < ft.second+1) max = ft.second+1;
}
}
}
for(int i=1;i<=n;i++){
if(discover[i] == max) answer++;
}
return answer;
}
게임개발을 희망하는 초등학생, 중학생, 고등학생들을 위한 c언어 책
이 글을 보고있다는건 게임개발에 관심있다는 거겠죠? 그렇다면 정말 잘보셨습니다. 읽기 쉽고, 단기간 내에 자기꺼화 할 수 있게 최대한 핵심만 담았습니다. 게임을 어떻게 만드는지 궁금해
blog.codingteacher.kr
초등, 중등, 고등 1:1 원격 c언어 교육문의
010 - 4537 - 7998
현재 대치동 학원에서 코딩강사로 활동중에 있습니다
영재고, 과학고 내신 /
초등, 중등, 고등 입문반, 초급, 중급, 정올반 /
앱, 게임 제작반 문의주세요!
'박기완 코딩교육 > 코딩테스트 대비' 카테고리의 다른 글
프로그래머스 네트워크 문제 (0) | 2020.10.19 |
---|---|
프로그래머스 타겟 넘버 문제 (0) | 2020.10.18 |
프로그래머스 입국심사 문제 (0) | 2020.10.16 |
프로그래머스 스킬트리 문제 (0) | 2020.10.15 |
프로그래머스 기능개발 문제 (0) | 2020.10.14 |