문제
https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
1. Union-Find로 풀이
class Solution {
int arr [];
public int solution(int n, int[][] computers) {
arr = new int [n];
for(int i=0;i<n;i++){
arr[i] = i;
}
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(computers[i][j] == 1){
union(i, j);
}
}
}
int answer = 0;
for(int i=0;i<n;i++){
if(arr[i] == i){
answer++;
}
}
return answer;
}
public void union(int a, int b){
int aRoot = find(a);
int bRoot = find(b);
arr[bRoot] = aRoot;
}
public int find(int a){
if(arr[a] == a) return a;
else return arr[a] = find(arr[a]);
}
}
2. bfs 로 풀이
import java.util.*;
class Solution {
public int solution(int n, int[][] computers) {
int answer = bfs(n, computers);
return answer;
}
public int bfs(int n, int[][] computers){
boolean visited[] = new boolean [n];
int count = 0;
for(int i=0;i<n;i++){
if(visited[i]) continue;
Queue<Integer> que = new LinkedList<>();
que.add(i);
visited[i] = true;
count++;
while(!que.isEmpty()){
int s = que.poll();
for(int d=0;d<n;d++){
if(s == d) continue;
if(computers[s][d] == 1){
if(!visited[d]){
que.add(d);
visited[d] = true;
}
}
}
}
}
System.out.println(count);
return count;
}
}
문제
https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
1. Union-Find로 풀이
class Solution { int arr []; public int solution(int n, int[][] computers) { arr = new int [n]; for(int i=0;i<n;i++){ arr[i] = i; } for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(computers[i][j] == 1){ union(i, j); } } } int answer = 0; for(int i=0;i<n;i++){ if(arr[i] == i){ answer++; } } return answer; } public void union(int a, int b){ int aRoot = find(a); int bRoot = find(b); arr[bRoot] = aRoot; } public int find(int a){ if(arr[a] == a) return a; else return arr[a] = find(arr[a]); } }
2. bfs 로 풀이
import java.util.*; class Solution { public int solution(int n, int[][] computers) { int answer = bfs(n, computers); return answer; } public int bfs(int n, int[][] computers){ boolean visited[] = new boolean [n]; int count = 0; for(int i=0;i<n;i++){ if(visited[i]) continue; Queue<Integer> que = new LinkedList<>(); que.add(i); visited[i] = true; count++; while(!que.isEmpty()){ int s = que.poll(); for(int d=0;d<n;d++){ if(s == d) continue; if(computers[s][d] == 1){ if(!visited[d]){ que.add(d); visited[d] = true; } } } } } System.out.println(count); return count; } }