🖥️ CS/SW Expert 외의 Algorithms

(프로그래머스 C++) 네트워크

한국의 메타몽 2020. 10. 3. 17:39

링크 : programmers.co.kr/learn/courses/30/lessons/43162

 

코딩테스트 연습 - 네트워크

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있��

programmers.co.kr

분류 : 깊이/너비 우선 탐색 (DFS/BFS)

 

이 문제는 배열, 혹은 벡터를 넘겨줄때 Call by value가 아닌 Call by reference로 넘겨줘야한다. 

깊이 생각하지 않고 코드를 작성하다가 무작정 Call by value로 적어낸 덕에 탈락을 맞이했고, 곰곰이 생각한 후에 

Call by value로 벡터를 넘긴 탓에 v[x][x]=0이라는 값을 제대로 덮어씌우지 못한다는 점을 깨달았다.

 

#include <string>
#include <vector>

using namespace std;

bool dfs(int x, vector<vector<int>> &v){
    if(v[x][x]==0) return false;
    v[x][x] = 0;  
    for(int i=0; i<v[x].size(); i++){
        if(v[x][i]==1) dfs(i,v);
    }
    return true;
}

int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    
    for(int i=0; i<n; i++){
        if(computers[i][i]!=0&&dfs(i,computers)) answer++;
    }
    
    return answer;
}

 

백준에서 필요하다고 생각되는 변수들은 무작정 선언했는데, 

프로그래머스에서는 정해진 규격을 지켜서 변수를 활용해야하다보니 코딩의 기초적인 필수개념들을 다시금 되새기게 된다.