🤓 스터디/💻 컴퓨터 알고리즘
[ 백준 BOJ / c++ ] 5567번 결혼식
Mr.Baobab
2025. 2. 16. 19:53
반응형
🤔 문제
링크 : https://www.acmicpc.net/problem/5567
👀 접근 방식
두 페어를 입력 받는 것을 보자마자 그래프 탐색 기법을 이용하려고 하였다. 하지만 친구의 친구까지만 찾으면 되기때문에 2중 for문으로 정답을 구하였다.
- 친구들의 관계를 벡터에 담는다.
- 상근이의 번호를 1번이므로, 1번 벡터의 크기( 상근이의 친구 수)를 구한다.
- 1번 벡터의 크기가 0일시, 친구가 없다는 뜻이므로(ㅠㅠ) 0을 출력한다.
- 1번 벡터의 크기 1보다 클 시, 상근이의 친구들과 친구의 친구를 visit를 활용해 탐색한다.
💻 코드
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
vector<int> manNumber[501];
int visit[501];
int n, m;
int main()
{
// n, m 입력
cin >> n >> m;
// 친구 관계 업데이트 쌍방향 관계이므로 a 와 b 둘다 추가
int a, b;
for (int i = 1; i <= m; ++i)
{
cin >> a >> b;
manNumber[a].push_back(b);
manNumber[b].push_back(a);
}
// 1번이 비어있다는 것은 친구가 없다는 뜻이므로 0 출력
if (manNumber[1].empty())
{
cout << 0;
}
else {
// 정답을 출력할 answer 선언과 1번(본인)은 방문처리
int answer = 0;
visit[1] = 1;
// 1번의 친구에 대해 반복
for (int i = 0; i < manNumber[1].size(); ++i)
{
// 1번 친구의 번호를 targetNumber에 담음
int targetNumber = manNumber[1][i];
// targetNumber 미방문시 방문처리 후 answer 증가
if (visit[targetNumber] != 1)
{
visit[targetNumber] = 1;
answer++;
}
// targetNumber의 친구 개수에 대해 반복
for (int j = 0; j < manNumber[targetNumber].size(); ++j)
{
// targetNumber의 친구번호를 friendNumber에 저장
int friendNumber = manNumber[targetNumber][j];
//freindNumber 미방문시 방문처리후 answer 1증가
if (visit[friendNumber] != 1)
{
visit[friendNumber] = 1;
answer++;
}
}
}
// 출력
cout << answer;
}
return 0;
}
반응형