티스토리 뷰

문제 링크입니다 : 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를 쓰면 된다.

 

 

 

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

using namespace std;

vector<vector<int>> adj;
vector<bool> visited;

vector<int> bfs(int start) {
    queue<int> q;
    q.push(start);
    visited[start] = true;
    
    vector<int> ret;
    
    while(!q.empty()) {
        int qSize = q.size();
        bool isFirst = true;
        for(int i = 0; i < qSize; i++) {
            int cur = q.front();
            q.pop();
            for(int j = 0; j < adj[cur].size(); j++) {
                int next = adj[cur][j];
                if(visited[next]) continue;
                if(isFirst) {
                    isFirst = false;
                    ret.clear();
                }
                visited[next] = true;
                ret.push_back(next);
                q.push(next);
            }
        }
    }
    return ret;
}

int solution(int n, vector<vector<int>> edge) {
    int answer = 0;
    
    adj.assign(n + 1, vector<int>());
    visited.assign(n + 1, false);
    
    for(int i = 0; i < edge.size(); i++) {
        int u = edge[i][0];
        int v = edge[i][1];
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    
    vector<int> result = bfs(1);
    
    answer = result.size();
    
    return answer;
}

 

 

 

개발 환경 : vscode

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/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
글 보관함