-
트리 - 백준(11725) 트리의 부모 찾기 - 트리의 표현과 탐색자료구조와 알고리즘/문제풀기 2024. 4. 28. 19:24
트리의 부모 찾기
시간 제한메모리 제한제출정답맞힌 사람정답 비율1 초 256 MB 83195 37189 26140 42.465% 문제
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
예제 입력 1 복사
7 1 6 6 3 3 5 4 1 2 4 4 7
예제 출력 1 복사
4 6 1 3 1 4
예제 입력 2 복사
12 1 2 1 3 2 4 3 5 3 6 4 7 4 8 5 9 5 10 6 11 6 12
예제 출력 2 복사
1 1 2 3 3 4 4 5 5 6 6
풀이
import java.io.*; import java.util.ArrayList; import java.util.List; public class Main { static List<Integer>[] gra; static int[] parents; static boolean[] check; static int V; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); V = Integer.parseInt(br.readLine()); int n = V-1; //부모노드정보 저장용 parents = new int[V+1]; //방문 체크용 check = new boolean[V+1]; gra = new List[V+1]; //그래프 초기화 for(int i=1; i<=V;i++){ gra[i] = new ArrayList<>(); } //루트 노드는 무조건 1임 //트리는 순환이 없는 무방향이라고 생각해요 while(n-- >0){ String[] input = br.readLine().split(" "); int n1 = Integer.parseInt(input[0]); int n2 = Integer.parseInt(input[1]); //연결 관계 초기화 gra[n1].add(n2); gra[n2].add(n1); } //1번이 root setParent(1); for(int i=2; i<=V;i++){ bw.write(parents[i]+"\n"); } bw.flush(); bw.close(); } static void setParent(int node){ //BASE CASE if(check[node]){ return; // 이미 부모 노드를 찾은 친구들은 돌아가 }else{ //RECURSIVE CASE //부모이므로 check check[node] = true; for(int i : gra[node]){ //부모로 지정된 적 없는 노드만 자식으로 등록 if(!check[i]) { parents[i] = node; setParent(i); } } } } }
'자료구조와 알고리즘 > 문제풀기' 카테고리의 다른 글
BFS - 백준(1697) 숨바꼭질 - 배열의 인덱스를 이용한 BFS (0) 2024.05.06 BFS - 백준(2178) 미로 찾기 - 4방향 탐색과 BFS (1) 2024.05.06 재귀 - 백준 15657 N과 M(8) - 중복 있는 조합 (1) 2024.04.28 재귀 - 백준(15656) N과 M(7) - 중복 있는 순열 (0) 2024.04.28 재귀 - 백준 15655 N과 M (6) - 중복 없는 오름차순 조합 (1) 2024.04.28