백준(Java)/23년 9월

[Java] 백준 - 9934번: 완전 이진 트리

C0MPAS 2023. 9. 7. 14:57

9월 7일(목) - 트리 (9934번)

 

9934번: 완전 이진 트리

상근이는 슬로베니아의 도시 Donji Andrijevci를 여행하고 있다. 이 도시의 도로는 깊이가 K인 완전 이진 트리를 이루고 있다. 깊이가 K인 완전 이진 트리는 총 2K-1개의 노드로 이루어져 있다. (아래

www.acmicpc.net

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

문제점

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

풀이

(C언어 풀이 활용 + List 활용 -> https://rovictory.tistory.com/121)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {

    static int K;
    static int[] arr;
    static List<ArrayList<Integer>> list;
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        K = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();

        arr = new int[(int)Math.pow(2,K) - 1];

        for(int i=0; i< arr.length; i++)
        {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        list = new ArrayList<>();
        for(int i=0; i<K; i++)
        {
            list.add(new ArrayList<>());
        }

        find_root(0, arr.length-1, 0);

        for(int i=0; i<K; i++)
        {
            for(int j : list.get(i))
            {
                sb.append(j).append(" ");
            }
            sb.append("\n");
        }

        System.out.println(sb);
    }

    static void find_root(int start, int end, int depth){

        if(depth == K)
        {
            return;
        }

        int mid = (start + end) / 2;
        list.get(depth).add(arr[mid]);

        find_root(start, mid-1, depth+1);
        find_root(mid+1, end, depth+1);
    }
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ