본문 바로가기

BOJ 문제풀이

#11724 연결요소의 개수

문제는 다음과 같다. (실버2)

'연결요소' 가 뭔지만 알면 어렵지 않은 문제였다. 그냥 dfs,bfs돌려서 한번 다 돌았으면 개수를 한개 추가해주면 되는거였다.

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;

vector<vector<int>> a(1001,vector<int>(1001,0));
int N,M,V;
int check[1001];
queue<int> q;
void reset(){
  for(int i=0;i<=N;i++){
    check[i]=0;
  }
}

void bfs(int x){
  q.push(x);
  check[x]=1;
  while(!q.empty()){
    //cout<<q.front()<<" ";
    x=q.front();
    q.pop();
    for(int i=1;i<=N;i++){
      if(a[x][i]==1&&check[i]==0){
        q.push(i);
        check[i]=1;
      }
    }
  }
}

int SUM(){
  int sum=0;
  for(int i=1;i<=N;i++){
    sum+=check[i];
  }
  return sum;
}

int main()
{
  int cc=0;
  int idx=0;  
  cin>>N>>M;
  while(M--){
    int n1,n2;
    cin>>n1>>n2;
    a[n1][n2]=1;
    a[n2][n1]=1;
  }
  reset();

  for(int i = 1; i <= N; i++){
    if (!check[i]){
      bfs(i);
      cc++;
    }
  }
  cout << cc;
}

코드는 위와 같다.

 

1. 배운것

-bfs에서는 queue를 이용하여 구현한다.

-위와 같이 vector를 선언하면, a[n1][n2]=1; 과 같이 접근하여 값을 대입하는것이 가능하다.

-백준 문제에 주어지는 <입력>을 잘 보고 배열의 크기를 잘 정해야한다.

  이 문제에서는 N과 M에 크기 제한이 있어서 위와 같이 vector의 크기를 1001로 맞추어 선언하였다.

  (그렇지 않으면 런타임 에러 Out of Bounds 뜨거나 틀림)

'BOJ 문제풀이' 카테고리의 다른 글

#2178 미로탐색  (0) 2022.03.29
#1012 유기농 배추  (0) 2022.03.27
#2667 단지번호 붙이기  (0) 2022.03.27
#1707 이분 그래프  (0) 2022.03.27
#2606 바이러스  (0) 2022.03.27