728x90
์ด๋ฐ์ ๋ฌธ์ Setting ํ ๋ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ ธ๊ณ ๋ฌถ์ธ ๊ฒ์ด ๋ช ๊ฐ์ธ์ง ํ์ ํ๋ ๊ฒ์์๋ ๋ง์ด ์๊ฐ์ ์ผ๋ค. ํ๋ค๋ณด๋๊น visited ํ์ง ์์ ๊ฒ์ ์์ํ ๋๊ฐ ๋คํธ์ํฌ๊ฐ ๋ฌ๋ผ์ง๋ ์๊ฐ์ด์๋ค.
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
vector<vector<int>> adj(n+1);
vector<int> visited(n+1, 0);
queue<int> queue;
// Diagonal Matrix ์ด๋ฏ๋ก Upper์ ํด๋นํ๋ ๊ฒ๋ง ์ทจํด์ adjacent list ๋ง๋ค๊ธฐ
for(int i = 0 ; i < n ; i++) {
for(int j = i+1 ; j < n ; j++) {
if(computers[i][j] == 1) {
adj[i+1].push_back(j+1);
adj[j+1].push_back(i+1);
}
}
}
// BFS๋ฅผ ์ด์ฉํด์ visited ํ์ง ์์ ์ฌ์ดํด์ ๋ ๋๋ง๋ค answer ๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
for(int i =1 ; i <= n ; i++) {
if(visited[i] == 1) continue;
queue.push(i);
visited[i] = 1;
while(!queue.empty()) {
int node = queue.front();
queue.pop();
for(int j = 0 ; j < adj[node].size() ; j++) {
if(!visited[adj[node][j]]) {
visited[adj[node][j]] = 1;
queue.push(adj[node][j]);
}
}
}
answer++;
}
return answer;
}