DFS 또는 BFS를 사용하여 연결 성분의 개수를 구하는 문제이다.
#include <string>
#include <vector>
using namespace std;
int visited[201];
int answer;
void dfs(int v, vector<vector<int>> computers){
visited[v] = answer;
for(int i = 0; i<computers[v].size(); i++){
if(v == i) continue;
if((computers[v][i] == 1) && !visited[i]) {
dfs(i,computers);
}
}
}
int solution(int n, vector<vector<int>> computers) {
for(int i = 0; i < computers.size(); i++){
if(!visited[i]){
++answer;
dfs(i,computers);
}
}
return answer;
}
피드백
: 크기가 큰 vector나 string을 함수의 인자로 넘겨줄 때는 pointer를 쓰는 게 좋다. visited도 배열이 아닌 벡터로 구현하면 크기를 따로 지정하지 않아도 된다. 크기를 지정할 때는 매크로 상수를 쓰도록 하자! 전역변수를 남용하는 습관을 고치자. 프로그래밍 대회가 아닌 이상 자제하는 게 좋다.
'STUDY > 코딩테스트 연습(PS)' 카테고리의 다른 글
프로그래머스/월간 코드 챌린지 시즌 1/두 개 뽑아서 더하기/C++ (0) | 2021.04.05 |
---|---|
프로그래머스/주식가격(스택,큐)/C++ (0) | 2021.04.02 |
프로그래머스/기능개발(스택,큐)/C++ (0) | 2021.03.30 |
백준/1969번(Greedy)/C++ (0) | 2021.03.04 |
백준/1541번(Greedy)/C++ (0) | 2021.03.01 |