Programming/Programmers

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

fishersheep 2022. 2. 26. 16:45
반응형
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <stack>

using namespace std;

bool visited[201];  //방문여부 확인하는 배열

int solution(int n, vector<vector<int>> computers) {
    int answer = 0; //네트워크 개수

    for (int i = 0; i < n; i++)
    {
        if (!visited[i])    //방문하지 않은 컴퓨터일 경우 bfs탐색
        {
            queue<int>q;
            q.push(i);
            visited[i] = true;

            while (!q.empty())
            {
                int a = q.front();
                q.pop();

                for (int j = 0; j < computers[a].size(); j++)
                {
                    if (a == j)continue;    //computers[i][i]는 항상 1이기에 continue
                    if (visited[j])continue;    //이미방문한경우 continue

                    if (computers[a][j] == 1)   //j가 연결된 컴퓨터인 경우
                    {
                        q.push(j);
                        visited[j] = true;
                    }
                }
            }

            answer++;   //네트워크 증가
        }
    }

    return answer;
}

int main()
{
    ios::sync_with_stdio(false);
    cout.tie(NULL);
    cin.tie(NULL);

    vector<vector<int>>v;
    vector<int>a;
    vector<int>b;
    vector<int>c;


    a.push_back(1);
    a.push_back(1);
    a.push_back(0);

    b.push_back(1);
    b.push_back(1);
    b.push_back(0);

    c.push_back(0);
    c.push_back(0);
    c.push_back(1);

    v.push_back(a);
    v.push_back(b);
    v.push_back(c);

    int temp = solution(3, v);

    cout << temp;

    return 0;
}

후기

처음에 queue 또는 stack을 사용안하고 for문과 if문만으로 할 수 있을 것 같아서 시도하다가 시간을 많이 쓰고 채점했을때 정확도가 절반만 맞았다. 다른 분들의 설명과 코드를 참고하고, 처음부터 다시 풀어서 정답을 맞았다. 

반응형