Algorithm

[BOJ/Java] 11725. 트리의 부모 찾기

컴공희 2024. 1. 25. 19:17

원래 문제 코드를 블로그에 올리지 않는데 한글 에디션이라서 기록. 

 

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

 

11725번: 트리의 부모 찾기

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

 


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {

    static List<Integer>[] 간선리스트;
    static int[] 부모배열;
    static boolean[] 방문체크;

    static class 노드 {
        int 출발노드;
        int 도착노드;

        public 노드(int 출발노드, int 도착노드) {
            this.출발노드 = 출발노드;
            this.도착노드 = 도착노드;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader 버리 = new BufferedReader(new InputStreamReader(System.in));
        int 노드수 = Integer.parseInt(버리.readLine());
        부모배열 = new int[노드수 + 1];
        방문체크 = new boolean[노드수 + 1];
        부모배열[1] = 1;

        간선리스트 = new List[노드수 + 1];
        for (int ㄴ = 0; ㄴ <= 노드수; ㄴ++) {
            간선리스트[ㄴ] = new ArrayList<>();
        }

        for (int ㅇ = 0; ㅇ < 노드수 - 1; ㅇ++) {
            StringTokenizer 스토 = new StringTokenizer(버리.readLine());
            int 시작 = Integer.parseInt(스토.nextToken());
            int 끝 = Integer.parseInt(스토.nextToken());
            간선리스트[시작].add(끝);
            간선리스트[끝].add(시작);
        }

        너비우선탐색(1);

        for (int ㄴ = 2; ㄴ <= 노드수; ㄴ++) {
            System.out.println(부모배열[ㄴ]);
        }
    }

    static void 너비우선탐색(int 시작노드) {
        Queue<Integer> 큐 = new ArrayDeque<>();
        큐.add(시작노드);
        방문체크[시작노드] = true;

        while (!큐.isEmpty()) {
            int 현재 = 큐.poll();
            for (int 다음 : 간선리스트[현재]) {
                if (!방문체크[다음]) {
                    if (부모배열[현재] != 0)
                        부모배열[다음] = 현재;
                    else
                        부모배열[현재] = 다음;

                    방문체크[다음] = true;
                    큐.add(다음);
                }
            }
        }
    }
}