티스토리 뷰
난이도 : 골드 4
크루스칼 알고리즘을 이용하여 풀었습니다.
별의 거리는 Math.sqrt(Math.pow(star[i].x - star[j].x, 2) + Math.pow(star[i].y - star[j].y, 2))입니다.
모든 별의 거리를 우선순위 큐에 넣고 크루스칼 알고리즘을 돌렸습니다.
정답 출력은 round를 이용했습니다.
전역 변수
int parent[] = 그룹의 대표를 나타내는 배열
함수
void main
입력을 받고 star, pq를 세팅합니다. 크루스칼을 돌리고 정답을 출력할 때 round를 이용했습니다. 0.666666이라는 수를 둘째 자리까지 출력해야 할 때를 예로 들면 0.666666*100 = 66.6666 여기서 반올림하면 67 그리고 다시 100으로 나누면 0.67이 됩니다.
즉 Math.round(n *100)/100.0입니다.
void union
두 개의 파라미터를 서로 연결합니다. 각 도시의 그룹 대표를 p1, p2로 구합니다.
그리고 그룹의 가장 작은 값이 그룹 대표가 되므로 작은 값을 기준으로 넣어줍니다.
int find
입력받은 수의 대푯값을 반환합니다.
재귀를 통해 구현했으며 재귀 과정에서 최적화를 거칩니다. 종료 시점은 파라미터의 대표가 곧 자신일 때(그룹의 가장 작은 수)입니다.
class Star
별의 번호, x 좌표, y 좌표를 저장합니다.
class Edge
간선의 정보를 저장합니다. 연결된 행성 v1, v2와 가중치 weight를 가집니다.
우선순위 큐의 타입이 될 것이므로 Comparable을 implements 해줍니다.
'문제풀이 > 백준 && 프로그래머스' 카테고리의 다른 글
[백준 1944] 복제 로봇 (자바) (0) | 2020.11.08 |
---|---|
[백준 1197] 최소 스패닝 트리 (자바) (0) | 2020.11.08 |
[백준 2887] 행성 터널 (자바) (0) | 2020.11.08 |
[백준 4195] 친구 네트워크 (자바) (0) | 2020.11.06 |
[백준 1976] 여행 가자 (자바) (0) | 2020.11.06 |
- Total
- Today
- Yesterday
- 프로그래머스
- 레벨4
- 그래프이론
- 면접
- 백준
- 스프링부트
- 구현
- 게시판
- 프로젝트
- 브루트포스
- 코딩테스트
- 후기
- 카카오
- 최소스패닝트리
- 레벨3
- 취준
- BFS
- 신입
- dfs
- 자료구조
- 그래프탐색
- 네이버
- 스프링
- 트리
- 시뮬레이션
- 실버
- 레벨2
- 골드
- 자바
- 플레
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |