728x90
반응형
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/43162
풀이
연결되어 있는 네트워크의 개수를 찾는 문제이다.
하나의 네트워크를 끝까지 하나씩 탐색하므로 dfs를 활용하자!
1. main
처음 컴퓨터 개수만큼 반복하며 방문하지 않은 경우 dfs를 실행하며 정답 카운터를 1 증가시킨다.
2. dfs
방문한 노드를 true처리한 후, for문을 돌아 연결되어 있는 경우(computers[idx][i]) && 방문하지 않은 경우(!visit[i]) dfs를 재귀 호출한다.
코드 (C++)
#include <string>
#include <vector>
using namespace std;
void dfs(int idx, vector<vector<int>> &computers, vector<bool> &visit, int n){
visit[idx] = true;
for(int i = 0; i < n; i++){
if(computers[idx][i] && !visit[i])
dfs(i, computers, visit, n);
}
}
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
vector<bool> visit(n, false);
for(int i = 0; i < n; i++){
if(!visit[i]){
answer++;
dfs(i, computers, visit, n);
}
}
return answer;
}
코드 (Java)
import java.util.*;
class Solution {
public void dfs(int idx, int[][] computers, boolean visited[], int n){
visited[idx] = true;
for(int i = 0; i < n; i++){
if(computers[idx][i] == 1 && !visited[i]){
dfs(i, computers, visited, n);
}
}
}
public int solution(int n, int[][] computers) {
int answer = 0;
boolean visited[] = new boolean[n];
for(int i = 0; i < n; i++){
if(!visited[i]) {
answer++;
dfs(i, computers, visited, n);
}
}
return answer;
}
}
728x90
반응형
'Tech > Algorithm' 카테고리의 다른 글
[프로그래머스] 문자열 압축 c++ (level2) 2020 KAKAO BLIND RECRUITMENT (0) | 2023.06.12 |
---|---|
[BOJ] 백준 6118 숨바꼭질 c++ (bfs) (0) | 2023.05.29 |
[BOJ] 백준 2143 두 배열의 합 c++ (이분탐색, 누적 합) (2) | 2023.04.20 |
[BOJ] 백준 13023 ABCDE c++ (DFS, 백트래킹) (0) | 2023.03.26 |
[BOJ] 백준 17404 RGB거리 2 c++ (dp) (0) | 2023.03.23 |