본문 바로가기
Algorithm/Programmers

[Lv.3] 네트워크

by 어발 2024. 4. 9.

출처. 프로그래머스

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

컴퓨터 갯수가 주어지고, 연결 정보가 주어진다.

주어진 정보로 총 몇개의 네트워크가 구성되는지 구하는 문제이다.

이 문제는 단순히 DFS로 풀면 간단하다. 이미 한번 방문했는지 저장하는 변수를 두고, 각 노드에서 연결된 모든 노드들을 반복해서 방문하면 된다. DFS & 재귀로 풀면 된다.

 

내용은 주석 참고

#include <vector>

#define MAX     (200U)

using namespace std;

bool visited[MAX];

void DoVisit(size_t cur, int n, vector<vector<int>>& computers) {
    visited[cur] = true; // 현재위치를 방문체크
    
    for (size_t i = 0 ; i < n ; i++) {
        if (!visited[i] && computers[cur][i] == 1) // 0~n 까지 반복하면서 방문안했고, 나랑 연결됬는지 조건검사를 통해 또 방문하도록 함
            DoVisit(i, n, computers);        
    }
}

int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    
    for (size_t idx = 0 ; idx < n ; idx++) {
        if (!visited[idx]) { // 방문했는지 체크
            DoVisit(idx, n, computers); // 방문안했으면, 현재 위치노드를 방문한다
            answer++; // 한번 다 돌았으면 하나의 네트워크로 구성됨
        }
    }
    
    return answer;
}
728x90

'Algorithm > Programmers' 카테고리의 다른 글

[Lv.3] 타겟 넘버  (0) 2024.05.20
[Lv.3] 아이템 줍기  (0) 2024.05.20
[Lv.3] 여행경로  (1) 2024.05.20
[Lv.3] 단어 변환  (0) 2024.04.10
[Lv.2] 게임 맵 최단거리  (1) 2024.04.07

댓글