DFS, BFS 로 풀어봤다!
DFS
import java.util.*;
class Solution {
static boolean visited[];
static ArrayList<ArrayList<Integer>> graph;
public int solution(int n, int[][] computers) {
int answer = 0;
graph = new ArrayList<>();
for(int i = 0; i < n; i++){graph.add(new ArrayList<>());}
for(int i=0;i<computers.length;i++){
for(int j=0;j<computers[i].length;j++){
if(i == j) continue;
if(computers[i][j] == 1){
graph.get(i).add(j);
}
}
}
visited = new boolean[n];
for(int i=0;i<n;i++){
if(!visited[i]){
dfs(i, graph);
answer++;
}
}
return answer;
}
static void dfs(int v, ArrayList<ArrayList<Integer>> graph){
visited[v] = true;
for(int next: graph.get(v)){
if(!visited[next]){
dfs(next, graph);
}
}
}
}
BFS
import java.util.*;
class Solution {
static boolean visited[];
public int solution(int n, int[][] computers) {
int answer = 0;
ArrayList<ArrayList<Integer>> edge = new ArrayList<>();
for(int i=0;i<n;i++) edge.add(new ArrayList<>());
for(int i=0;i<computers.length;i++){
for(int j=0;j<computers[i].length;j++){
if(i == j) continue;
if(computers[i][j] == 1) edge.get(i).add(j);
}
}
visited = new boolean[n];
Queue<Integer> q = new LinkedList<>();
for(int i=0;i<n;i++){
if(visited[i]) continue;
q.offer(i);
answer++;
while(!q.isEmpty()){
int cur = q.poll();
if(visited[cur]) continue;
visited[cur] = true;
for(int next: edge.get(cur)){
if(!visited[next]){
q.offer(next);
}
}
}
}
return answer;
}
}'코딩테스트 연습 > programmers' 카테고리의 다른 글
| [프로그래머스] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 - MYSQL (0) | 2025.10.15 |
|---|---|
| [프로그래머스] 노선별 평균 역 사이 거리 조회하기 - MYSQL (0) | 2025.10.15 |
| [프로그래머스] 다음 큰 숫자 - JAVA (0) | 2025.10.10 |
| [프로그래머스] 코딩테스트 연습 > 2021 KAKAO BLIND RECRUITMENT > 메뉴 리뉴얼 (0) | 2025.10.04 |
| [프로그래머스] 코딩테스트 연습 > 연습 > 문제시저 암호 (0) | 2025.10.03 |