본문 바로가기

problem solving

[프로그래머스]네트워크

 

#include <string>
#include <vector>
#include <algorithm>
#include <queue>
 
using namespace std;
 
bool network[201][201];
bool check[201][201];
 
int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    
    for(int i = 0; i < 201; i++) {
        fill(network[i], network[i] + 2010);
        fill(check[i], check[i] + 2010);
    }
    
    for(int idx = 0; idx < n; idx++) {
        for(int i = 0; i < n; i++) {
            if(!computers[idx][i]) { continue; }
            network[idx][i] = true;
            network[i][idx] = true;
        }
    }
    
    queue<pair<intint>> mainQ;
    for(int idx = 0; idx < n; idx++) {
        for(int i = 0; i < n; i++) {
            if(check[idx][i] || !computers[idx][i]) { continue; }
            
            while(!mainQ.empty()) { mainQ.pop(); }
            mainQ.push( { idx, i });
            while(!mainQ.empty()) {
                int y = mainQ.front().first;
                int x = mainQ.front().second;                
                mainQ.pop();
                
                for(int j = 0; j < n; j++) {
                    if(check[x][j] || !computers[x][j]) { continue; }
                    check[x][j] = true;
                    mainQ.push( { y, j });
                }
            }
            answer++;
        }    
    }
    
    
    return answer;
}
cs

'problem solving' 카테고리의 다른 글

[프로그래머스]여행경로  (0) 2020.03.13
[프로그래머스]단어 변환  (0) 2020.03.12
[프로그래머스]카펫  (0) 2020.03.12
[프로그래머스]베스트앨범  (0) 2020.03.12
[프로그래머스]위장  (0) 2020.03.12