-
99클럽 코테 스터디 31일차 TIL / 네트워크(프로그래머스)Study(진행중)/항해99 2024. 8. 21. 20:24
오늘의 학습 키워드
- 알고리즘
- 그래프 탐색
- 유니온-파인드
공부한 내용 본인의 언어로 정리하기
https://school.programmers.co.kr/learn/courses/30/lessons/43162
유니온 파인드 + 그래프 탐색 알고리즘이 합쳐진 문제를 풀었다.
아이디어가 바로 떠올라서 금방 풀었다.
풀이 과정은 다음과 같다.
1. union-find 코드 작성
1 - 1. union(a, b) : a와 b집합이 있을때 두 집합을 합치는 연산
1 - 2. find(a) : a집합의 부모는 누구인지 확인하는 연산
2. 제공된 그래프를 반복문을 돌며 연결되었다면 union
2 - 1. 이 때 computers[i][j] = computers[j][i]이므로 반복문을 돌 때 아래와 같은 범위만 계산하면 됨
3. 모든 그래프에 대한 네트워크가 만들어졌다면, 모든 컴퓨터에 대해 반복문을 돌며 find 연산으로 중복을 제외한 모든 네트워크를 구하기 위해 set에 추가
풀이는 다음과 같다.
import java.util.*; class Solution { int[] parents; public int solution(int n, int[][] computers) { parents = new int[n]; for (int i = 0; i < n; i++) parents[i] = i; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (i == j) continue; if (computers[i][j] == 1) union(i, j); } } HashSet<Integer> networkSet = new HashSet<>(); for (int parent : parents) { networkSet.add(find(parent)); } return networkSet.size(); } boolean union(int a, int b) { int parentA = find(a); int parentB = find(b); if (parentA == parentB) return false; parents[parentA] = parentB; return true; } int find(int a) { if (parents[a] == a) return a; return parents[a] = find(parents[a]); } }
반응형'Study(진행중) > 항해99' 카테고리의 다른 글
99클럽 코테 스터디 33일차 TIL / 단어 변환(프로그래머스) (0) 2024.08.24 99클럽 코테 스터디 32일차 TIL / 아이템 줍기(프로그래머스) (0) 2024.08.22 99클럽 코테 스터디 30일차 TIL / 잃어버린괄호(백준) (0) 2024.08.20 99클럽 코테 스터디 29일차 TIL / MongoDB, Postgres, MariaDB 차이점 (0) 2024.08.19 99클럽 코테 스터디 28일차 TIL / TCP & HTTP 차이점 (0) 2024.08.18