프로그래머스 - 네트워크

phoenixKim·2021년 8월 26일
0

풀이전략

  1. 인덱스 번호 증가함에 따라 1이 포함된 값을 큐에 집어 넣고,
    바로 옆에 붙어 잇는 친구들을 탐색하는 것이므로
    bfs로 풀어야 겟다고 생각햇다.

  2. solution에다가 바로 작성하면 되지 않을까 생각을 했는데,
    연결이 안되어 있는 친구들 접근을 못하므로,
    바깥으로 뺀후, for문 돌려서 bool 체크 하는 방식으로 접근했다.

  3. 예외 처리에 대해서는..
    일단은 1 인수에 관해서만 삽입을 하고,
    체크 변수를 사용해서 하나의 정점 확인 후에 들어오지 않도록 추가했다.

  4. for문안테 checked 가 또 있는데 이것은 이러한 이유때문에 추가했다.

    -> 0번 인덱스는 현재 0번과 1번 값이 1이므로 큐에다가 1번 인덱스를 추가했다.
    그러면 1번 정점으로 들어가서 1번 인덱스에는 0번과 1번 정점에 1인데,
    위에서 0번 정점 이미 확인을 했으므로, 0번 정점에 대해서 수행할 필요가 없어서 for문에서 checked 불체크를 진행햇다.
    확인해보니 굳이 checked 불체크 안해도 된다.

소스코드

#include <string>
#include <vector>
#include <queue>
using namespace std;

bool bfs(vector<vector<int>>&computers,vector<bool>&checked, int index)
{
    if(checked[index])
        return false;
    
    queue<int>q;
    q.push(index);
    
    
    while(!q.empty())
    {
        int curNode = q.front();
        q.pop();
        
        if(checked[curNode])
            continue;
        checked[curNode] = true;
        for(int i = 0; i < computers[curNode].size(); i++)
        {
            if(checked[i])
                continue;
            
            if(i == curNode)
                continue;
            
            if(computers[curNode][i] == 1)
                q.push(i);
        }     
    }
    
    return true;
}

int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    
    vector<bool> checked(n,false);
    
    for(int i = 0; i < computers.size(); i++)
    {
        if(bfs(computers,checked, i))
            answer++;
    }
    
    return answer;
}

profile
🔥🔥🔥

0개의 댓글

관련 채용 정보