#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(int n, vector<vector<int>> edge)
{
// 연결된 노드들
vector<vector<int>> vecNode(n + 1);
// 까지 가는데 걸린 길이
vector<int> vecNodeLen(n + 1, 0);
// 방문 했는가
vector<bool> vecVisited(n + 1, false);
queue<int> queue = {};
int iNode = 0;
int iNextNode = 0;
int answer = 0;
// 연결시키기
for (int i = 0; i < edge.size(); i++)
{
vecNode[edge[i][0]].push_back(edge[i][1]);
vecNode[edge[i][1]].push_back(edge[i][0]);
}
// 처음 시작은 1
queue.push(1);
vecVisited[1] = true;
while (!queue.empty())
{
// 다음것에 큐를 넣어야하기 때문에 빼고 시작
iNode = queue.front();
queue.pop();
// DFS는 가까운 거리들을 모두 넣는 거니까 가까운 거리들 넣기
for (int i = 0; i < vecNode[iNode].size(); i++)
{
iNextNode = vecNode[iNode][i];
// 방문을 안했다면 방문
if (!vecVisited[iNextNode])
{
vecVisited[iNextNode] = true;
vecNodeLen[iNextNode] = vecNodeLen[iNode] + 1;
queue.push(iNextNode);
}
}
}
// 길이가 젤 긴 것들을 기준으로 소트
sort(vecNodeLen.begin(), vecNodeLen.end(),greater<>());
for (int i = 0; i < vecNodeLen.size(); ++i)
{
if (vecNodeLen[0] != vecNodeLen[i])
break;
answer++;
}
return answer;
}
처음에 재귀로 들어가서 엄청 헤맸다.
BFS인가 DFS인가 어떤 걸 써야 하나 싶었는데 BFS 써보고 아니다 싶어서 큐를 썼다.
그 뒤에는 길이 체크, 방문 체크 두 개를 했어야 해서 헤맸었다.
그래도 BFS만 써봤는데 DFS도 써봤네
이해해놓고 계속 봐야겠군
'오늘의 알고리즘' 카테고리의 다른 글
[C++]2021 Dev-Matching: 웹 백엔드 개발자(상반기)행렬 테두리 회전하기(프로그래머스 2레벨) (0) | 2022.02.11 |
---|---|
[C++]2017 팁스타운 짝지어 제거하기(프로그래머스 2레벨) (0) | 2022.02.10 |
[C++]이분탐색 입국심사(프로그래머스 3레벨) (0) | 2022.02.07 |
[C++]탐욕법(Greedy) 체육복(프로그래머스 1레벨) (0) | 2022.02.06 |
[C++]2019 카카오 개발자 겨울 인턴십 크레인 인형뽑기 게임(프로그래머스 1레벨) (0) | 2022.02.05 |