✅ LV. 3
🔖 BFS
vector v
: 검사한 컴퓨터 표시0
을 큐에 넣음for
문으로 방문하지 않은 컴퓨터 번호 찾아 큐에 push
return
front
원소를 현재 인덱스로 설정하고 pop
for
문으로 한번더 검사하지 않았던 컴퓨터이면서 현재 컴퓨터와 연결되어 있는 컴퓨터 인덱스 찾아서 큐에 push
count
하도록 구현한 answer
(네트워크 개수)이 제대로 책정되지 않음for
문으로 탐색하는 것이 비효율적for
문으로 하자니 이중 for
문을 남발하고 변수도 남발하게 됨큐가 비었을 경우, 아직 방문하지 않았던 컴퓨터를 찾기 위해 for
문을 사용하는 것이 아니라 find
함수를 사용해 vector v
에서 0
인덱스를 찾아 해당 인덱스를 큐에 push
해서 모든 컴퓨터를 탐색할 때까지 반복
이 방법을 통해 for
문을 남발하지 않고 코드도 간결하게 구현할 수 있었음
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
queue<int> q;
vector<int> v(n,0);
q.push(0);
while(1) {
if(q.empty()) {
answer++;
auto idx=find(v.begin(),v.end(),0);
if(idx==v.end()) return answer;
q.push(idx-v.begin());
}
int cur=q.front();
q.pop();
v[cur]=1;
for(int i=0;i<n;i++) {
if(v[i]==0&&computers[cur][i]==1) q.push(i);
}
}
return answer;
}