CodingTEST

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

경걍 2024. 1. 12. 10:42
반응형

백준 11725번 문제 -  트리의 부모 찾기

 

11725번: 트리의 부모 찾기

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

www.acmicpc.net


문제 분석 

 

 

  • 트리의 루트를 1이고, 노드끼리 연결 정보를 알려준다.
  • 각 노드의 부모를 구하는 프로그램을 작성하시오. 

 

해결 포인트

 

  • BFS 사용
  • 연결 정보를 저장
  • 1을 큐에 넣고 그들의 연결 정보를 알아낸다. 방문하지 않은 노드일 경우, 이 전 값을 해당 값의 부모로 저장

 

코드
import java.io.*;
import java.util.*;

public class Main {
    public static int [] result;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());

        ArrayList<Integer> [] nears = new ArrayList[N+1];
        for (int i = 1; i <= N; i++) {
            nears[i] = new ArrayList<>();
        }

        for (int i = 0; i < N-1; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());

            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());

            nears[a].add(b);
            nears[b].add(a);
        }

        result = new int[N+1];
        BFS(nears, N);

        for (int i = 2; i <= N; i++) {
            bw.write(result[i] + "\n");
        }

        bw.flush();
        bw.close();
    }
    public static void BFS(ArrayList<Integer> [] nears, int N) {
        Queue<Integer> queue = new LinkedList<>();
        boolean [] visit = new boolean[N+1];

        visit[1] = true;
        queue.add(1);

        while (!queue.isEmpty()) {
            int value = queue.poll();

            ArrayList<Integer> near = nears[value];

            for(int n : near) {
                if(!visit[n]) {
                    result[n] = value;
                    visit[n] = true;
                    queue.add(n);
                }
            }
        }

    }
}
반응형