BOJ #5567 상근이의 결혼식

김토리·2024년 11월 12일

알고리즘

목록 보기
24/27

최근에 문제가 더 다양한 백준으로 갈아타고 열심히 문제 푸느라 벨로그 작성이 조금 뜸했다.
그래프 관련 문제를 코딩테스트에서 마주한 적이 있는데 많이 부족하다고 느껴서 오늘은 그래프 문제집을 풀었고, 나는 이 뿐만 아니라 많이 부족하다는 것을 깨달았다 ^^..

처음에 5567번 문제를 여러 번 읽고 정확히 이해가 안되었는데, 힌트를 보고 정확히 이해했다.

즉, 상근이의 친구,그리고 그 친구들의 친구까지만 결혼식에 초대한다.
가장 큰 키포인트다. 따라서 나는 BFS로 풀었고, 상근이(0),친구(1),친구들의 친구(2)로 레벨을 매겨서 2부터는 queue에 push하지 않는다는 제한을 걸어서 돌렸다.

*참고로 매개변수에 level을 추가한 DFS로도 풀이가 가능하다.

###나의 풀이

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>

#define MAX 501

using namespace std;

int n,m;
vector<int> map[MAX];
bool visitied[MAX];
struct node{
  int x,level;
};
int main() 
{
  ios_base::sync_with_stdio(false); 
  cin.tie(NULL); 
  cout.tie(NULL);
  queue <node> q;
  int result=0;
  cin >> n; 
  cin >> m;
    
    for(int i =0; i< m ; i++){
      int a ,b; 
      cin >> a >> b;
      
      map[a].push_back(b);
      map[b].push_back(a);
      
    }
    
      q.push({1,0});
    
    while(!q.empty()){
      node now = q.front();
      int index = now.x;
      q.pop();
      visitied[index] = true;
      if(now.level == 2) continue;
      for(int i = 0 ; i < map[index].size(); i++){
        if(visitied[map[index][i]] )continue;
         visitied[map[index][i]] =true;
         q.push({map[index][i],now.level+1});
         result++;
         
      }
    }
    cout<<result;
    return 0;
}
profile
웹 개발하며 데이터 분석, AI 공부하는 jinveloper

0개의 댓글