네트워크
Level 3
https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1 - 2 처럼 이어진 네트워크를 하나로 본다.
위 경우 네트워크의 총 개수는 2개이다. 1 - 2 / 3
나의 풀이
int solution(int n, vector<vector<int>> computers)
{
// 단방향 네트워크 체크.
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
if (computers[i][j] != computers[j][i])
{
computers[i][j] = 0;
computers[j][i] = 0;
}
vector<vector<int>> visitCheck = computers;
int cnt = 0;
for (int i = 0; i < n; ++i)
{
// 한번 방문한 노드는 재검색 X
if (visitCheck[i][i] != 1) continue;
queue<int> q;
q.push(i);
while (!q.empty())
{
int computer = q.front();
q.pop();
for (int k = 0; k < n; ++k)
{
// 자기 자신은 pass
if (k == computer) continue;
if (computers[computer][k] == 1 && visitCheck[computer][k] >= 0 && visitCheck[k][computer] >= 0)
{
q.push(k);
visitCheck[computer][k] = -1;
visitCheck[k][k] = -1;
}
}
}
++cnt;
}
return cnt;
}
먼저, 단방향 네트워크를 제거해주고
BFS로 노드들을 탐색한다.
BFS 너비 우선 탐색 (Breadth-First Search)
'개발 🛠💻 > 코딩테스트 & 알고리즘' 카테고리의 다른 글
Data Structure Visualizations (0) | 2022.08.22 |
---|---|
C++ 프로그래머스 코딩테스트 - 야근 지수 (12927) (0) | 2022.07.22 |
C++ 프로그래머스 코딩테스트 - 기지국 설치 (12979) (0) | 2022.07.21 |
C++ 프로그래머스 코딩테스트 - 경주로 건설 (67259) (0) | 2022.07.21 |
C++ 프로그래머스 코딩테스트 - 가장 먼 노드 (49189) (0) | 2022.07.18 |
댓글