알고리즘 공부/DFS 13

백준 1967(트리의 지름)

문제 트리(tree)는 사이클이 없는 무방향 그래프이다. 트리에서는 어떤 두 노드를 선택해도 둘 사이에 경로가 항상 하나만 존재하게 된다. 트리에서 어떤 두 노드를 선택해서 양쪽으로 쫙 당길 때, 가장 길게 늘어나는 경우가 있을 것이다. 이럴 때 트리의 모든 노드들은 이 두 노드를 지름의 끝 점으로 하는 원 안에 들어가게 된다. 이런 두 노드 사이의 경로의 길이를 트리의 지름이라고 한다. 정확히 정의하자면 트리에 존재하는 모든 경로들 중에서 가장 긴 것의 길이를 말한다. 입력으로 루트가 있는 트리를 가중치가 있는 간선들로 줄 때, 트리의 지름을 구해서 출력하는 프로그램을 작성하시오. 아래와 같은 트리가 주어진다면 트리의 지름은 45가 된다. 트리의 노드는 1부터 n까지 번호가 매겨져 있다. 1167번에서..

백준 1167번 (트리의 지름)

DFS 를 이용해서 문제를 풀지만 트리의 지름을 찾는 알고리즘을 알아야했다. 트리의 지름이란, 트리에서 거리중 가장 긴 것을 말한다. 정점마다 각각의 정점으로 향하는 가중치의 값을 모두 구하기에는 시간제한에 걸릴것 같아 DFS 를 이용하여 임의의점(여기서 나는 1로 두었다) 에서 제일 거리간 긴점, 그 점에서 제일 멀리있는 점이 트리의 지름이라는 글을 읽고 문제를 풀었다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; class Node{ public int v, d; public Node(int..

백준 11725(트리 부모찾기)

처음에는 Node 의 클래스 생성을 통해 트리구조를 만들고 찾아가는 방식을 사용하였다. 이렇게 할 경우 자식의 list 를 반복문으로 다 찾아야하기 때문에 시간초과가 되는 오류가 발생했다. 실행시간을 줄이기 위해 그래프구조의 DFS 방식을 사용하였다. ​ import java.util.LinkedList; import java.util.Scanner; public class Main { static int n; static Node tree; public static void main(String[] args){ Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); String line = null; line = scanner.nextLine..