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

leejihun·2022년 11월 22일
0

알고리즘

목록 보기
44/50

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

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

int iCheck[201];

void dfs(int iCur, int iN, vector<vector<int>> &computers)
{
    iCheck[iCur] = 1;

    for (int i = 0; i < iN; i++)
    {
        if (!iCheck[i] && computers[iCur][i])//[from][to]
        {
            dfs(i, iN, computers);
        }
    }
}

int solution(int n, vector<vector<int>> computers)
{
    int answer = 0;

    for (int i = 0; i < n; i++)
    {
        if (!iCheck[i]) //체크 되지 않은 노드면  dfs돌리고 answer++
        {
            dfs(i, n, computers);
            answer++;
        }
    }

    return answer;
}

DPS문제
dps구현은 금방 했는데 answer를 어디서 구해야할지 헷갈렸다.
dfs를 돌리고 dfs가 한번 다 돌아갈때마다 그래프가 1개이기 때문에 answer를 늘려준다.

"네트워크" 문제를 해결하기 위해서는 DFS() 함수의 인자인 visit을 Call by Reference 해야만 한다. 왜냐하면, vector visit 의 갱신된 값을 solution() 의 DFS()에서 계속 이용하기 때문에, DFS()에서 갱신된 vector visit을 solution으로 전달해야만 한다. 따라서, 갱신된 값 전달이 안 되는 Call by Value가 아니라, 갱신된 값을 전달할 수 있는 Call by Reference를 이용한다.
-참초 https://code-block.tistory.com/2

profile
U+221E

0개의 댓글