문제 풀이/백준

[백준] 11725번. 트리의 부모 찾기(JAVA)

27200 2025. 1. 2. 12:04

문제

https://www.acmicpc.net/problem/11725


풀이

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int n = Integer.parseInt(br.readLine());
        List<List<Integer>> tree = new ArrayList<>();
        for (int i = 0; i <= n; i++) {
            tree.add(new ArrayList<>());
        }
        
        for (int i = 0; i < n - 1; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());
            
            tree.get(start).add(end);
            tree.get(end).add(start); // 양방향 간선 추가
        }
        
        int[] parent = new int[n + 1];
        boolean[] visited = new boolean[n + 1];
        Queue<Integer> queue = new LinkedList<>();
        
        // BFS로 부모 찾기
        queue.add(1);
        visited[1] = true;
        
        while (!queue.isEmpty()) {
            int current = queue.poll();
            
            for (int child : tree.get(current)) {
                if (!visited[child]) {
                    visited[child] = true;
                    parent[child] = current; // 부모 설정
                    queue.add(child);
                }
            }
        }
        
        // 부모 출력
        for (int i = 2; i <= n; i++) {
            System.out.println(parent[i]);
        }
    }
}

 

트리의 양방향성을 추적하기 위해 먼저 리스트에 모두 넣은 뒤 bfs를 통해 부모를 저장해주는 방식으로 진행하였다.