STUDY/코딩테스트 연습(PS)

프로그래머스/네트워크(DFS,BFS)/C++

hyunah 2021. 3. 31. 14:43

문제설명

 

DFS 또는 BFS를 사용하여 연결 성분의 개수를 구하는 문제이다.

 

참고 : hyunah-home.tistory.com/entry/%EA%B9%8A%EC%9D%B4%EC%9A%B0%EC%84%A0-%ED%83%90%EC%83%89DFS%EC%99%80-%EB%84%88%EB%B9%84%EC%9A%B0%EC%84%A0-%ED%83%90%EC%83%89BFS-%EC%9D%91%EC%9A%A9-%EC%97%B0%EA%B2%B0-%EC%84%B1%EB%B6%84-%EC%B0%BE%EA%B8%B0

 

 

#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도 배열이 아닌 벡터로 구현하면 크기를 따로 지정하지 않아도 된다. 크기를 지정할 때는 매크로 상수를 쓰도록 하자! 전역변수를 남용하는 습관을 고치자. 프로그래밍 대회가 아닌 이상 자제하는 게 좋다.