728x90
문제
상근이는 자신의 결혼식에 학교 동기 중 자신의 친구와 친구의 친구를 초대하기로 했다. 상근이의 동기는 모두 N명이고, 이 학생들의 학번은 모두 1부터 N까지이다. 상근이의 학번은 1이다.
상근이는 동기들의 친구 관계를 모두 조사한 리스트를 가지고 있다. 이 리스트를 바탕으로 결혼식에 초대할 사람의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 상근이의 동기의 수 n (2 ≤ n ≤ 500)이 주어진다. 둘째 줄에는 리스트의 길이 m (1 ≤ m ≤ 10000)이 주어진다. 다음 줄부터 m개 줄에는 친구 관계 ai bi가 주어진다. (1 ≤ ai < bi ≤ n) ai와 bi가 친구라는 뜻이며, bi와 ai도 친구관계이다.
출력
첫째 줄에 상근이의 결혼식에 초대하는 동기의 수를 출력한다.
접근 방식
처음에는 간단한 DFS 문제인 줄 알았다.
하지만 DFS로 풀게 될 경우 동기 중 친구의 친구 즉, depth가 최대 2인 친구까지만 초대해야 하므로
매번 이를 확인해줘야 하는 불편함이 생겼다.
따라서, BFS를 통해 상근이부터의 거리를 모두 구한다음
거리가 1,2인 친구들만 초대할 수 있도록 코드를 구현하였다!
코드
#include<bits/stdc++.h>
using namespace std;
vector<vector<int>> v;
int dist[505];
int ans = 0;
int main() {
int n,m; cin>>n>>m;
v.resize(n+1);
for(int i=0; i<m; i++) {
int a,b; cin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
memset(dist, -1, sizeof(dist));
queue<int> q;
q.push(1);
dist[1] = 0;
while(!q.empty()) {
int x = q.front(); q.pop();
for(auto nxt : v[x]) {
if(dist[nxt] != -1) continue;
dist[nxt] = dist[x]+1;
q.push(nxt);
}
}
for(int i=2; i<=n; i++) {
if(dist[i] == 1 || dist[i] == 2) ans++;
}
cout<<ans;
}
728x90
'Algorithm' 카테고리의 다른 글
[BOJ] Costume Party 6159번 C++ (0) | 2024.10.25 |
---|---|
[BOJ] 수들의 합 5 2018번 C++ (0) | 2024.10.25 |
[BOJ] 침투 13565번 C++ (0) | 2024.10.17 |
[BOJ] 텔레포트 정거장 18232번 C++ (0) | 2024.10.15 |
[BOJ] 모양 만들기 16932번 C++ (4) | 2024.10.12 |