문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 전략
주어진 벡터 computers는 인접 행렬로 두 컴퓨터 간의 연결 상태를 표현한다. 각 컴퓨터를 노드로 하여 방문하지 않은 노드에 대해 그래프 탐색을 수행한다. 서로 연결된 노드를 탐색해가며 방문했음을 표시한다. 한 번의 그래프 탐색 호출 시 서로 연결된 모든 노드를 탐색하게 되므로 하나의 네트워크를 찾게 된다. 따라서 그래프 탐색을 호출한 횟수가 네트워크의 수 이다.
C++ 코드
/*
https://school.programmers.co.kr/learn/courses/30/lessons/43162
*/
#include <vector>
using namespace std;
int A[200][200]; //인접 행렬
int V[200]; //방문 리스트
int N;
void DFS(const int cur) {
for(int next = 0; next < N; ++next) {
if(cur == next || A[cur][next] == 0 || V[next]) {continue;}
V[next] = true;
DFS(next);
}
}
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
N = n;
for(int i = 0; i < N; ++i) {
V[i] = false;
}
for(int i = 0; i < N; ++i) {
for(int j = 0; j < N; ++j) {
A[i][j] = computers[i][j];
}
}
for(int i = 0; i < N; ++i) {
if(V[i] == false) {
V[i] = true;
DFS(i);
answer++;
}
}
return answer;
}
'algorithm & data structure' 카테고리의 다른 글
[백준] 1753 최단경로 / 다익스트라 알고리즘 / C++ 풀이 (2) | 2023.08.16 |
---|---|
[프로그래머스] 배달 / 다익스트라 알고리즘 / C++ 코드 (0) | 2023.08.05 |
[프로그래머스] 단속카메라 / 탐욕법, Greedy / C++ 풀이 (0) | 2023.07.31 |
[프로그래머스] 선입 선출 스케줄링 / 이분탐색, binary search / C++ 풀이 (0) | 2023.07.29 |
[백준] 2468 안전 영역 / BFS, 깊이 우선 탐색 (0) | 2023.07.26 |