Zayson
A to Zayson!
Zayson
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (132)
    • Computer Science (20)
      • Network (4)
      • DB (12)
      • OS (4)
    • Algorithm (32)
      • ์™„์ „ํƒ์ƒ‰(Brute-Force) (3)
      • ๊ทธ๋ฆฌ๋””(Greedy) (6)
      • ํˆฌํฌ์ธํ„ฐ(Two-Pointer) (1)
      • ๊ทธ๋ž˜ํ”„(Graph) (5)
      • BFS & DFS (9)
      • ๊ตฌํ˜„, ์‹œ๋ฎฌ๋ ˆ์ด์…˜(Implementation) (5)
      • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(DP) (3)
    • Backend (51)
      • Spring Boot (19)
      • JPA (16)
      • Kafka (2)
      • Java (13)
      • Kotlin (1)
    • DevOps (1)
      • Jenkins (5)
      • Oracle Cloud Infrastructure (1)
      • Kubernetes & Docker (1)
    • Trouble Shooting (3)
      • JPA (1)
      • Spring Boot (2)
    • ํšŒ๊ณ  (5)
      • ์—”๋นต ํ”„๋กœ์ ํŠธ ํฌ์ŠคํŠธ ๋กœ๋“œ๋งต (1)
      • 2022๋…„ (4)
    • Kafka (7)
      • Kafka (5)
      • Kafka Connect (2)
    • ๊ธฐ์ˆ  ์„œ์  (6)
      • ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ (3)
      • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ •๋ณตํ•ด์•ผํ•  ๊ฐ์ฒด ์ง€ํ–ฅ๊ณผ ๋””์ž์ธ ํŒจํ„ด (2)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • BFS
  • Backend
  • ์™„์ „ํƒ์ƒ‰
  • ๊ทธ๋ฆฌ๋””
  • Kafka Connect
  • ์—”๋นตํ”„๋กœ์ ํŠธ
  • ๋ผ์ด๋ธŒ์Šคํ„ฐ๋””
  • ๋ฐฑ์ค€
  • dfs
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • SpringBoot
  • ๋‚˜ ํ˜ผ์ž ์Šคํ”„๋ง๋ถ€ํŠธ!
  • Computer science
  • ๊ตฌํ˜„
  • CS
  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹ค์ „ ์ž…๋ฌธ
  • kafka
  • spring boot
  • JPA
  • Java

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Zayson

A to Zayson!

[๋ฐฑ์ค€, Java] 9934๋ฒˆ : ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ
Algorithm/BFS & DFS

[๋ฐฑ์ค€, Java] 9934๋ฒˆ : ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ

2022. 5. 20. 23:05

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

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

๐Ÿ˜ฎ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ƒ๊ทผ์ด๊ฐ€ ๋„์‹œ๋ฅผ ๋ฐฉ๋ฌธํ•œ ์กฐ๊ฑด์„ ์‚ดํŽด๋ณด๋ฉด ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋„์‹œ๊นŒ์ง€ ๋ฐฉ๋ฌธํ•œ ํ›„ ๊ทธ ๋ถ€๋ชจ๋ฅผ ๋ฐฉ๋ฌธ ํ•œ ๋’ค ๋‹ค์‹œ ์˜ค๋ฅธ์ชฝ์„ ํƒ์ƒ‰ํ•œ๋‹ค.

์ฆ‰, inorder ์ค‘์œ„ ์ˆœํšŒ ๋ฐฉ์‹๊ณผ ๋™์ผํ•˜๋‹ค.

์ƒ๊ทผ์ด๊ฐ€ ๋ฐฉ๋ฌธํ•œ ๋„์‹œ์˜ ํŠธ๋ฆฌ ๋ชจ์–‘์„ ํ‘œํ˜„ํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋ฏ€๋กœ, ๋…ธ๋“œ ๋ฒˆํ˜ธ๊ฐ€ 1, 2, 3 ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์คฌ๋‹ค.

์ƒˆ๋กœ ๋งŒ๋“  ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์ค‘์œ„ ์ˆœํšŒ๋ฅผ ํ•œ ํ›„ ๋ฐฉ๋ฌธํ•œ ๋„์‹œ๋“ค์„ ์Šคํƒ์— ์ €์žฅํ•œ๋‹ค.

์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ๋„์‹œ์™€ ์Šคํƒ์— ์ €์žฅํ•œ ๋„์‹œ๊ฐ€ ๋™์ผํ•œ ์ˆœ์„œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ๋„์‹œ์™€ ์Šคํƒ์— ์ €์žฅํ•œ ๋„์‹œ๋ฅผ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ๋งคํ•‘ํ•ด์ค€ ๋’ค ์ƒˆ๋กœ ๋งŒ๋“  ํŠธ๋ฆฌ์˜ ๋ชจ์–‘๋Œ€๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์ƒˆ๋กœ ๋งŒ๋“  ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ ๋ฒˆํ˜ธ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ด๋ฏ€๋กœ ์ƒˆ๋กœ ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ ๋…ธ๋“œ ๋ฒˆํ˜ธ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ•ด์ค€ ํ›„ ๋งคํ•‘ ๋œ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ ๋…ธ๋“œ๋ฅผ ๋ ˆ๋ฒจ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

 

  1. ๋…ธ๋“œ ๋ฒˆํ˜ธ๊ฐ€ 1,2,3 … ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. ์ƒˆ๋กœ ๋งŒ๋“  ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์ค‘์œ„ ์ˆœํšŒ๋ฅผ ํ•œ ๋ฐฉ๋ฌธ ๋„์‹œ Path๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
  3. ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ ๋ฐฉ๋ฌธ ๋„์‹œ์™€ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“  ํŠธ๋ฆฌ์˜ ๋ฐฉ๋ฌธ ๋„์‹œ๋Š” ๋™์ผํ•œ ์ˆœ์„œ์ž„์„ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ๋งคํ•‘ํ•ด์ค€๋‹ค.
  4. ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“  ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๋ฒˆํ˜ธ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ค€๋‹ค.
  5. ์ƒˆ๋กœ ๋งŒ๋“  ํŠธ๋ฆฌ์˜ 1๋ฒˆ ๋…ธ๋“œ ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋งคํ•‘๋œ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ ๋ฐฉ๋ฌธ ๋„์‹œ๋ฅผ ๋ ˆ๋ฒจ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

๐Ÿšฉ Java ์ฝ”๋“œ

package com.algorithm.Baekjoon;

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

public class Main_9934_์™„์ „_์ด์ง„_ํŠธ๋ฆฌ {
    static class Node {
        private int node;
        private int left;
        private int right;

        public Node(int node, int left, int right) {
            this.node = node;
            this.left = left;
            this.right = right;
        }

        public int getNode() {
            return node;
        }

        public int getLeft() {
            return left;
        }

        public int getRight() {
            return right;
        }

        public void setNode(int node) {
            this.node = node;
        }

        public void setLeft(int left) {
            this.left = left;
        }

        public void setRight(int right) {
            this.right = right;
        }
    }

    static class City implements Comparable<City> {
        private int inputPath;
        private int makePath;

        public City(int inputPath, int makePath) {
            this.inputPath = inputPath;
            this.makePath = makePath;
        }

        public int getInputPath() {
            return inputPath;
        }

        @Override
        public int compareTo(City o) {
            return Integer.compare(this.makePath, o.makePath);
        }
    }
    
    private static Stack<Integer> path, makePath;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        path = new Stack<>();
        makePath = new Stack<>();

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

        // ์ด์ง„ ํŠธ๋ฆฌ ์ดˆ๊ธฐํ™”
        Map<Integer, Node> tree = new HashMap<>();
        for (int node = 1; node < (int) Math.pow(2, N); node++) {
            tree.put(node, new Node(node, 0, 0));
        }

        // ์ƒ๊ทผ์ด๊ฐ€ ๋ฐฉ๋ฌธํ•œ ๋„์‹œ ๋ฒˆํ˜ธ ์ €์žฅ
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int loop = 1; loop < (int) Math.pow(2, N); loop++) {
            path.push(Integer.parseInt(st.nextToken()));
        }

        // ๋ฃจํŠธ๋ฅผ 1 2 3 ์ˆœ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ ๋งŒ๋“ค๊ธฐ
        for(int level = 1; level < N; level++) {
            for(int node = (int) Math.pow(2, level); node < (int) Math.pow(2, level+1); node++) {
                if(node % 2 == 0) tree.get(node / 2).setLeft(node);
                else tree.get(node / 2).setRight(node);
            }
        }

        // ์ƒˆ๋กœ ๋งŒ๋“  ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ๋ฐฉ๋ฌธ ์กฐ๊ฑด(inorder)์— ๋”ฐ๋ผ ๊ธธ ๋งŒ๋“ค๊ธฐ
        inorder(1, tree);

        // ์ƒ๊ทผ์ด์˜ ๋„์‹œ ์ถœ๋ ฅ
        makeCity(N);
        br.close();
    }

    private static void makeCity(int n) {
        List<City> city = new ArrayList<>();
        // 1 2 3 ์ˆœ์„œ์˜ ์ด์ง„ ํŠธ๋ฆฌ๋กœ ๋งŒ๋“  ๊ฒฝ๋กœ์™€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋„์‹œ ๊ฒฝ๋กœ๋ฅผ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ์ €์žฅ
        while(!path.isEmpty() && !makePath.isEmpty()) {
            city.add(new City(path.pop(), makePath.pop()));
        }

        // ์ƒˆ๋กœ ๋งŒ๋“  ํŠธ๋ฆฌ๊ฐ€ 1 2 3 ์ˆœ์„œ๋กœ ๋˜๋„๋ก ์ •๋ ฌ ํ›„ ์ถœ๋ ฅ
        Collections.sort(city);
        int index = 1;
        int level = 1;
        for (City c : city) {

            System.out.print(c.getInputPath()+" ");
            if(index == (int) Math.pow(2, level)-1) {
                System.out.println();
                level++;
            }
            index++;
        }
    }

    private static void inorder(int node, Map<Integer, Node> tree) {
        if(node == 0) return;

        inorder(tree.get(node).getLeft(), tree);
        makePath.push(node);
        inorder(tree.get(node).getRight(), tree);
    }
}

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Algorithm > BFS & DFS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€, Java] 1039๋ฒˆ : ๊ตํ™˜  (0) 2022.07.22
[๋ฐฑ์ค€, Java] 19621๋ฒˆ : ํšŒ์˜์‹ค ๋ฐฐ์ • 2  (0) 2022.05.23
[๋ฐฑ์ค€, Java] 16928๋ฒˆ : ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„  (0) 2022.05.09
[๋ฐฑ์ค€, Java] 1967๋ฒˆ : ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„  (0) 2022.05.08
[๋ฐฑ์ค€, Java] 1068๋ฒˆ : ํŠธ๋ฆฌ  (0) 2022.05.08
    'Algorithm/BFS & DFS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [๋ฐฑ์ค€, Java] 1039๋ฒˆ : ๊ตํ™˜
    • [๋ฐฑ์ค€, Java] 19621๋ฒˆ : ํšŒ์˜์‹ค ๋ฐฐ์ • 2
    • [๋ฐฑ์ค€, Java] 16928๋ฒˆ : ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„
    • [๋ฐฑ์ค€, Java] 1967๋ฒˆ : ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„
    Zayson
    Zayson
    ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”