본문 바로가기
[알고리즘 + 자료구조]/[프로그래머스]

프로그래머스 네트워크

by Hevton 2022. 9. 23.
반응형

 

아주아주 오랜만에 코딩문제를 풀어봤다..

특히나 백준만 풀어오다가, 프로그래머스를 첫 도전해봤다.

 

난 아직도 C++ 벡터와 문자열 처리에 익숙하지가 않다. 그만큼 열심히 안했다는게 느껴진다..

그냥 다른 언어로 전향해볼까..

 

프로그래머스 환경에 적응도 안됐는데, 문제도 오랜만에 풀어서 아주 머리가 백지가 되었다.

 

그래서 아래와 같이,, 처음 푼 코드는 매우 지저분했다.

#include <string>
#include <vector>

using namespace std;

void dfs(vector<vector<int>>& v, int i, int n) {
    
    for(int k = 0; k < n; k++) {
        
        if(v[i][k]) {
            
            v[i][k] = 0;
            dfs(v, k, n);
        }
    }
}


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

    return answer;
}

 

 


 

프로그래머스의 좋은점은, 풀고 나서 다른 사람의 풀이를

좋아요 순으로 볼 수 있는 것 같다. 그 코드를 참고하고, 검색을 통해 다른 코드를 참고해서 다시 풀어봤다.

https://velog.io/@ajufresh/프로그래머스-네트워크-문제풀이-Java

#include <string>
#include <vector>

using namespace std;

void dfs(vector<vector<int>>& computers, vector<int>& visit, int n, int i) {
    
    visit[i] = 1;

    for(int k = 0; k < n; k++) {
        
        if(k != i && computers[k][i] && visit[k] == 0) {
            computers[k][i] = 0;
            dfs(computers, visit, n, k);
        }
    }


}

int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    
    
    vector<int> visit(n, 0); // 크기가 n인 1차원 벡터 선언 후 0으로 초기화
    
    for(int i = 0; i < n; i++) {
        
        if(visit[i] == 0) {
            
            dfs(computers, visit, n, i);
            answer++;
        }
        
    }
    
    return answer;
}

 

 

+ 그리고 XCode IDE로 실행을 연습해볼때에는, 2차원 벡터는 이렇게 하면 된다.

vector<vector<int>> v = {{1, 1, 0}, {1, 1, 1}, {0, 1, 1}};
반응형