티스토리 뷰
https://www.acmicpc.net/problem/1967
난이도 : 골드 4
가장 긴 지름을 만드는 노드 node1과 node2가 있다고 가정한다면, 임의의 노드 1개에서 가장 먼 노드는 node1이나 node2 일 것입니다.
여기서 긴 지름에 참여하는 노드 1개를 구하고 나머지 하나의 노드를 구하면 node1과 node2를 둘 다 구할 수 있습니다.
가장 먼 노드는 dfs로 구했습니다.
https://www.acmicpc.net/problem/1167
같은 방식으로 위 문제 또한 풀 수 있습니다.
전역 변수
LinkedList<Edge> tree[] = 노드들의 연결 정보를 저장하는 배열
int distance[] = 출발 노드부터 각 노드까지의 거리
int max, index = 출발 노드로부터 가장 먼 거리 max와 그 노드의 번호 index
boolean visit[] = dfs 할 때 각 노드의 방문 여부를 저장
함수
void main
입력을 받고 전역 변수들을 세팅해줍니다. 트리는 무방향 그래프이므로 잘 연결해줍니다.
노드가 1개만 있을 경우도 예외 처리해줍니다.
총 2번의 dfs를 합니다. 첫 번째는 임의의 노드(1)에서 가장 먼 노드를 구하고, 이 구한 노드로부터 가장 먼 노드를 구합니다.
(dfs 호출)
void dfs
node 번호와 가중치를 파라미터로 dfs합니다.
현재 노드의 가중치를 최대 값으로 계속 업데이트하고 그때의 노드 번호를 index에 저장합니다.
연결된 노드 중 방문하지 않은 노드를 dfs합니다.
(dfs 호출)
class Edge
간선의 정보를 저장합니다. 연결된 노드 번호 number와 가중치 weight를 가집니다.
1167 트리의 지름 정답 코드
'문제풀이 > 백준 && 프로그래머스' 카테고리의 다른 글
[백준 3860] 할로윈 묘지 (자바) (0) | 2020.12.01 |
---|---|
[백준 1865] 웜홀 (자바) (0) | 2020.11.27 |
[백준 1944] 복제 로봇 (자바) (0) | 2020.11.08 |
[백준 1197] 최소 스패닝 트리 (자바) (0) | 2020.11.08 |
[백준 4386] 별자리 만들기 (자바) (0) | 2020.11.08 |
- Total
- Today
- Yesterday
- 최소스패닝트리
- 그래프탐색
- 구현
- dfs
- 면접
- 플레
- 시뮬레이션
- 스프링부트
- 브루트포스
- 후기
- 골드
- 네이버
- 실버
- 트리
- 스프링
- 레벨3
- 프로젝트
- 레벨2
- 백준
- 레벨4
- 프로그래머스
- 코딩테스트
- 취준
- 카카오
- 그래프이론
- 자료구조
- 신입
- 게시판
- 자바
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |