풀이
간단한 dfs문제였다 노드는 좌표가 아니라 번호로 주어졌고 연결 여부는 2차원 벡터로 주어졌다.
인접행렬말 인접리스트를 이용해 풀었다.
방문하지 않았던 노드라면 그 노드부터 dfs를 수행한다. 노드를 방문하면 chk에 방문여부를 저장해준다.
dfs를 수행한 횟수가 네트위크 개수이므로 답으로 반환한다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<int>node[201];
vector<bool>chk(201,0);
void dfs(int idx){
chk[idx]=true;
for(int i=0;i<node[idx].size();i++){
if(!chk[node[idx][i]])
dfs(node[idx][i]);
}
}
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
int com_size = computers.size();
for(int i=0;i<com_size ;i++){
for(int j=i+1;j<com_size;j++){
if(computers[i][j]){
node[i].push_back(j);
node[j].push_back(i);
}
}
}
for(int i=0;i<com_size;i++){
if(!chk[i]){
dfs(i);
answer++;
}
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 단어 변환 c++ (1) | 2024.02.09 |
---|---|
[프로그래머스] 게임 맵 최단거리 c++ (0) | 2024.02.07 |
[프로그래머스] 도둑질 c++ (1) | 2024.02.06 |
[프로그래머스] 사칙연산 c++ (0) | 2024.02.05 |
[프로그래머스] 등굣길 c++ (0) | 2024.02.02 |