문제풀이(Problem Solving)

프로그래머스, 네트워크 : C++ [CPP]

게임이 더 좋아 2021. 11. 19. 11:03
반응형
728x170

이것도 생각한지 10분만에 내 머릿속에 있는 생각이 맞았다는 것이 너무 기뻐서

팔짝 뜀

내 생각이 점차 논리적으로 맞아가고 있네

 

 

https://programmers.co.kr/learn/courses/30/lessons/43162

 


 

#맞는 풀이

 

#include <string>
#include <vector>
#include <queue>


using namespace std;

int visited[201][201]; // 네트워크를 연결상태 [from][to] 구분하기 위함
bool node[201]; //[노드 방문했는지]



int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    //모든 노드를 조사해야함
    for(int i = 0; i<n; i++){
        if(node[i]) continue;        //이미 조사한 노드면 넘어감.
        node[i] = true; //조사 안했으면 이제 조사하니까 true -> 조사 안했다면 새로운 네트워크임
        answer++; // 네트워크 번호를 붙임.
        queue<int> q; //해당 노드에서 연결된 노드를 넣을 것임
        
        //현재 조사하고있는 노드와 연결되어있는 노드가 q에 담김(자신 포함)
        for(int j = 0; j<n; j++){
            //연결되어 있다면 -> 연결정보 업데이트
            if(computers[i][j] == 1){
                visited[i][j] = answer; //answer가 네트워크 번호임.
                visited[j][i] = answer; // 서로 연결되어있으므로 
                //연결된 j번 노드를 queue에 넣음
                q.push(j);
            }
        }
        
        //q에 담긴 모든 노드를 조사함 -> q는 조사하면서 다시 노드들이 담길 것임.
        while(!q.empty()){
            int x = q.front(); //현재 조사할 노드;
            q.pop();
            if(node[x]) continue; //이미 조사했던 것이면 pass
            node[x] = true;       //조사 안했으면 위와 같이 다시 함.
            
            //현재 조사하고있는 노드와 연결되어있는 노드가 q에 담김(자신 포함)
            for(int j = 0; j<n; j++){
                //연결되어 있다면 -> 연결정보 업데이트
                if(computers[x][j] == 1){
                    visited[x][j] = answer; //answer가 네트워크 번호임.
                    visited[j][x] = answer; // 서로 연결되어있으므로 
                    //연결된 j번 노드를 queue에 넣음
                    q.push(j);
                }
            }
        }
        
        //이 for문 한번이 돌면 해당 node와 연결되어있는 모든 노드는 조사한 것임 -> 한 개의 네트워크 조사
        
        
    }
    
    return answer;
}

Level 3 에서 쉬운 것이겠지만

내 처음 생각한대로 풀어서 맞았다는 것이 너무 기분이 좋다.

 

 

728x90
반응형
그리드형