2023년 06월 04일 일요일 - 낚시가 안된다~~
오늘 올려볼 문제는 547번 Number of Provinces 이라는 문제이다.
사진을 클릭하면 해당 문제로 이동합니다.
오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.
오랜만에 빨리 푼듯.. ㅋㅋㅋㅋ
입력
사진에서도 볼 수 있듯이 2차원 int 배열이 입력으로 들어온다.
풀이 및 코드
도시들의 연결정보가 주어졌을 때 각 집합의 개수가 몇개인지 구하는 문제이다.
오늘은 처음부터 정답을 생각해냈다.
union find를 활용해서 문제를 풀었다.
이제 코드를 봐보자!
풀이코드
class Solution {
public int findCircleNum(int[][] isConnected) {
int n = isConnected.length;
var 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(isConnected[i][j] == 1) {
int a = find(arr, i), b = find(arr, j);
if(a < b) arr[b] = a;
else arr[a] = b;
}
}
}
var set = new HashSet<Integer>();
for(int i = 0; i < n; i++) set.add(find(arr, i));
return set.size();
}
private int find(int[] arr, int n) {
if(arr[n] == n) return n;
return arr[n] = find(arr, arr[n]);
}
}
제출 화면
오랜만에 정석같은 문제가 나와서 안틀리고 바로 풀 수 있었던 것 같다.
내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.