๐Ÿ“‚์ฝ”๋”ฉํ…Œ์ŠคํŠธ:CodingTest

์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ (๋ฐฑ์ค€ 5639๋ฒˆ)

mc.thd 2023. 12. 28. 13:53

์ „์œ„์ˆœํšŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ , ํ›„์œ„์ˆœํšŒ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

ํ’€์ด ์ˆœ์„œ

1. ์ž…๋ ฅ์„ ๋ฐ”ํƒ•์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑ. (๋…ธ๋“œ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉ)

2. ๋…ธ๋“œ ํด๋ž˜์Šค ๋‚ด๋ถ€์— insert ํ•จ์ˆ˜ ์ž‘์„ฑ.

insert ํ•จ์ˆ˜ : ์ž…๋ ฅ๋œ ๋…ธ๋“œ์˜ ๊ฐ’์„ ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ, ์™ผ์ชฝ ํ˜น์€ ์˜ค๋ฅธ์ชฝ์— ๋‹ฌ์•„์ฃผ๋Š” ํ•จ์ˆ˜.

 

์ด๋•Œ insert ํ•จ์ˆ˜์— ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • ํ•ด๋‹น ์œ„์น˜๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด ํ•ด๋‹น ์œ„์น˜์— ๋…ธ๋“œ๋ฅผ ๋‹ฌ์•„์ฃผ๊ณ ,
  • ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ํ•ด๋‹น ์œ„์น˜์— ์žˆ๋Š” ๋…ธ๋“œ์˜ insertํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€ํ˜ธ์ถœ

 

์ฝ”๋“œ

package com.mincheolsong;
import java.io.*;
import java.util.*;

public class Main {

    // BOJ 5639๋ฒˆ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ
   
    static class Node{
        int num;
        Node left, right;
        public Node(int num){
            this.num = num;
        }

        public void insert(Node input){
            if(this.num > input.num){ // ์™ผ์ชฝ
                if(this.left == null){ // ๋น„์–ด์žˆ์œผ๋ฉด ๋‹ฌ์•„์ฃผ๊ธฐ
                    this.left = input;
                }else{ // ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ์žฌ๊ท€ํ˜ธ์ถœ
                    this.left.insert(input);
                }
            }else { // ์˜ค๋ฅธ์ชฝ
                if(this.right == null){ // ๋น„์–ด์žˆ์œผ๋ฉด ๋‹ฌ์•„์ฃผ๊ธฐ
                    this.right = input;
                }else{ // ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ์žฌ๊ท€ํ˜ธ์ถœ
                    this.right.insert(input);
                }
            }
        }

    }

    static void solve(Node node){
        if(node!=null){
            solve(node.left);
            solve(node.right);
            System.out.println(node.num);
        }
    }

    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        Node root = new Node(Integer.parseInt(br.readLine()));

        while(true){
            String input = br.readLine();
            if(input==null || input.equals("")) break;
            int n = Integer.parseInt(input);
            root.insert(new Node(n));
        }

        solve(root);

    }

}

๋ฌธ์ œ

์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.

  • ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ํ‚ค๋Š” ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ์ž‘๋‹ค.
  • ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ํ‚ค๋Š” ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ํฌ๋‹ค.
  • ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋„ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์ด๋‹ค.

์ „์œ„ ์ˆœํšŒ (๋ฃจํŠธ-์™ผ์ชฝ-์˜ค๋ฅธ์ชฝ)์€ ๋ฃจํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ ๋…ธ๋“œ์˜ ํ‚ค๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ํ›„์œ„ ์ˆœํšŒ (์™ผ์ชฝ-์˜ค๋ฅธ์ชฝ-๋ฃจํŠธ)๋Š” ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ๋ฃจํŠธ ๋…ธ๋“œ ์ˆœ์„œ๋Œ€๋กœ ํ‚ค๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์˜ ์ „์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋Š” 50 30 24 5 28 45 98 52 60 ์ด๊ณ , ํ›„์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋Š” 5 28 24 45 30 60 52 98 50 ์ด๋‹ค.

์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ์ „์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ํŠธ๋ฆฌ๋ฅผ ํ›„์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

ํŠธ๋ฆฌ๋ฅผ ์ „์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋…ธ๋“œ์— ๋“ค์–ด์žˆ๋Š” ํ‚ค์˜ ๊ฐ’์€ 106๋ณด๋‹ค ์ž‘์€ ์–‘์˜ ์ •์ˆ˜์ด๋‹ค. ๋ชจ๋“  ๊ฐ’์€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง€๋ฉฐ, ๋…ธ๋“œ์˜ ์ˆ˜๋Š” 10,000๊ฐœ ์ดํ•˜์ด๋‹ค. ๊ฐ™์€ ํ‚ค๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ

์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ํ›„์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.