반응형
programmers.co.kr/learn/courses/30/lessons/43162
bfs문제였습니다.
풀이방법
1. bfs의 호출 개수가 곧 네트워크의 개수가 됩니다.
2. 연결된 인접행렬의 정점을 계속 q에 push하면서 ck배열로 방문했음을 체크해줍니다.
Code
#include <bits/stdc++.h>
using namespace std;
void bfs(int x, int ck[], vector<vector<int>> &computers){
queue <int> q;
q.push(x);
ck[x] = 1;
while(!q.empty()){
int num = q.front();
q.pop();
for(int next = 0; next < computers[num].size(); next++){
if(computers[num][next] && !ck[next]){
q.push(next);
ck[next] = 1;
}
}
}
}
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
int ck[201];
memset(ck,0,sizeof(ck));
for(int i = 0; i < computers.size(); i++){
if(!ck[i]){
bfs(i,ck,computers);
answer++;
}
}
return answer;
}
'Algorithm > BFS' 카테고리의 다른 글
(C++) - 백준(BOJ) 1303번 : 전쟁 - 전투 (0) | 2021.03.13 |
---|---|
(C++) - 백준(BOJ) 5567번 : 결혼식 (0) | 2021.03.12 |
(C++) - 프로그래머스(2017 카카오 코드 예선) : 카카오프렌즈 컬러링북 (0) | 2020.12.27 |
(C++) - 백준(BOJ) 2638번 : 치즈 답 (0) | 2020.09.27 |
(C++) - 백준(BOJ) 2589번 : 보물섬 답 (0) | 2020.09.19 |