๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„

[๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘  ์ž๋ฃŒ๊ตฌ์กฐ

๊ฐœ๋ฐœ์ž HOON 2022. 12. 18. 21:03

 

๐Ÿง‘๐Ÿป‍๐Ÿ’ป ๊ธ€์„ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ..

- ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ์—์„œ ์ž์ฃผ ๋‚˜์˜ค๋Š” ์งˆ๋ฌธ์„ ๋ชจ์•„ ํ•œ ๋ฒˆ์— ์ •๋ฆฌํ•œ ํฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
- ์‹ ์ž… ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ ๋ฉด์ ‘์„ ์ค€๋น„ํ•˜๋Š” ์‚ฌ๋žŒ์œผ๋กœ, ์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์˜ฌ๋ฐ”๋ฅธ ๋‹ต์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ฐ˜์˜ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
- ํ•„์ž๋Š” Java ๊ธฐ๋ฐ˜์˜ ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋ฅผ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธ€ ๋‚ด๋ถ€์— Java ํ˜น์€ ๋ฐฑ์—”๋“œ ๊ด€๋ จ ์šฉ์–ด๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Java๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ž์‹ ์˜ ์ง๋ฌด ์–ธ์–ด ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ ๊ด€์ ์—์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿง‘๐Ÿป‍๐Ÿ’ป ์ž๋ฃŒ๊ตฌ์กฐ ๋ฉด์ ‘ ์งˆ๋ฌธ

๐Ÿ’ก  Array์™€  LinkedList๊ฐ€ ๊ฐ๊ฐ ๋ฌด์—‡์ธ์ง€, ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

Array๋Š” ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, ๊ณ ์ • ๊ธธ์ด์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ˆœ์„œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•˜๋Š” Index๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, Index๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” Random Access๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Index๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ƒ‰์ธํ•˜๋ฉด O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์ค‘๊ฐ„์— ๊ฐ’์„ ์‚ฝ์ž… ํ˜น์€ ์‚ญ์ œ์— ๋Œ€ํ•ด์„ , ๋’ค์˜ ์š”์†Œ๋“ค์„ ๋ชจ๋‘ ํ•œ ์นธ์”ฉ ๋ฐ€๊ฑฐ๋‚˜ ๋‹น๊ฒจ์•ผ ํ•˜๋ฏ€๋กœ Worst Case์˜ ๊ฒฝ์šฐ O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

 

๊ณ ์ •๊ธธ์ด, ๋Š๋ฆฐ ์‚ฝ์ž… ์‚ญ์ œ ์—ฐ์‚ฐ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‚˜์˜จ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ LinkedList ์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฐ ๋…ธ๋“œ๋ฅผ ์„œ๋กœ ์—ฐ๊ฒฐ ์‹œ์ผœ ๋งŒ๋“  ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ๊ฐ€๋ณ€ ๊ธธ์ด์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘๊ฐ„์— ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ธฐ์กด์˜ ์—ฐ๊ฒฐ์„ ๋Š๊ณ , ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ์„ ๋งบ๋Š” ๊ณผ์ •๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„, ์‚ญ์ œํ•˜๋Š” ๊ณผ์ •์—์„œ๋„ ๊ธฐ์กด์˜ ์—ฐ๊ฒฐ์„ ๋Š๊ณ  ๊ทธ ๋’ค์˜ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐํ•˜๋Š” O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด ํŠน์ • ๊ฐ’์„ ์ฐพ๋Š” ๊ณผ์ •์€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋‚ด๋ถ€๋ฅผ ๋ชจ๋‘ ์™„์ „ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ worst case์˜ ๊ฒฝ์šฐ O(N)์ธ ๋‹จ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

2022.10.23 - [๐Ÿงช ์ปดํ“จํ„ฐ๊ณผํ•™ : CS] - [์ž๋ฃŒ๊ตฌ์กฐ] Array์™€ LinkedList์˜ ์ฐจ์ด (์ธํ„ฐ๋ทฐ ๋Œ€๋น„)

 

[์ž๋ฃŒ๊ตฌ์กฐ] Array์™€ LinkedList์˜ ์ฐจ์ด (์ธํ„ฐ๋ทฐ ๋Œ€๋น„)

๐Ÿ’ก 1. Array(๋ฐฐ์—ด), Array VS ArrayList 1. ๋ฐฐ์—ด : ๋ฐฐ์—ด์€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. 2.ํฌ๊ธฐ : ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ๊ณ ์ •๊ธธ์ด์ด๋ฏ€๋กœ, ์ถ”๊ฐ€์ ์œผ๋กœ ๋Š˜๋ฆด ์ˆ˜ ์—†๋‹ค. Array ๋Š” ์ดˆ๊ธฐํ™” ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• 

hoons-dev.tistory.com

 

 

๐Ÿ’ก  LinkedList๋ฅผ ์†์ฝ”๋”ฉ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ
class ListNode{
    private String data;
    public ListNode next;
    
    public ListNode(String data) {
        this.data = data;
        this.next = null;
    }

    public String getData() {
        return this.data;
    }
}

public class LinkedList {

    private ListNode head;

    public LinkedList() {
        head = null;
    }

    public void insertNode(ListNode preNode, String data) {
        ListNode newNode = new ListNode(data);
        newNode.next = preNode.next;
        preNode.next = newNode;
    }
    
    public void insertNode(String data) {
        ListNode newNode = new ListNode(data);
        if(head == null) {
            this.head = newNode;
        } else {
            ListNode tempNode = head;
            while(tempNode.next != null) {
                tempNode = tempNode.next;
            }
            tempNode.next = newNode;
        }
    }

    public void deleteNode(String data) {
        ListNode preNode = head;
        ListNode tempNode = head.next;
        
        if(data.equals( preNode.getData() )) {
            head = preNode.next;
            preNode.next = null;
        } else {
            while(tempNode != null) {
                if(data.equals( tempNode.getData() )) {
                    if(tempNode.next == null) {
                        preNode.next = null;
                    } else {
                        preNode.next = tempNode.next;
                        tempNode.next = null;
                    }
                    break;
                } else {
                    preNode = tempNode;
                    tempNode = tempNode.next;
                }
            }
        }
    }

    public void deleteNode() {
        ListNode preNode;
        ListNode tempNode;

        if(head == null) {
            return;
        }

        if(head.next == null) {
            head = null;
        } else {
            preNode = head;
            tempNode = head.next;

            while(tempNode.next != null) {
                preNode = tempNode;
                tempNode = tempNode.next;
            }
            preNode.next = null;
        }
    }

    public ListNode searchNode(String data) {
        ListNode tempNode = this.head;
        while(tempNode != null) {
            if(data.equals(tempNode.getData())) {
                return tempNode;
            } else {
                tempNode = tempNode.next;
            }
        }
        return tempNode;
    }

}

 

 

๐Ÿ’ก  Stack๊ณผ Queue์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , ๊ฐ๊ฐ ์–ด๋””์— ์‚ฌ์šฉ๋˜์—ˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์Šคํƒ์€, ์„ ์ž…ํ›„์ถœ์˜ ํŠน์„ฑ์„ ๊ฐ€์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์Šคํƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐฐ์—ด / ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ฃผ๋กœ ๋ฐฐ์—ด์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ์ด ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„์€ ๋ธŒ๋ผ์šฐ์ €์˜ '๋’ค๋กœ๊ฐ€๊ธฐ' ๊ธฐ๋Šฅ์ด๋‚˜, ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ์Šคํƒ ์˜์—ญ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

ํ๋Š”, ์„ ์ž…์„ ์ถœ์˜ ํŠน์„ฑ์„ ๊ฐ€์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ํ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐฐ์—ด / ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ฃผ๋กœ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ํ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„์€ ํ”„๋ฆฐํ„ฐ ํ, CPU ์Šค์ผ€์ค„๋ง์˜ Ready Queue ๋“ฑ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

2022.10.23 - [๐Ÿงช ์ปดํ“จํ„ฐ๊ณผํ•™ : CS] - [์ž๋ฃŒ๊ตฌ์กฐ] Stack๊ณผ Queue์˜ ๋น„๊ต (์ธํ„ฐ๋ทฐ ๋Œ€๋น„)

 

[์ž๋ฃŒ๊ตฌ์กฐ] Stack๊ณผ Queue์˜ ๋น„๊ต (์ธํ„ฐ๋ทฐ ๋Œ€๋น„)

๐Ÿ’ก 1. Stack(์Šคํƒ)์ด๋ž€? 1. ์Šคํƒ : Stack ์€ ๋จผ์ € ๋“ค์–ด๊ฐ„ ์š”์†Œ๊ฐ€ ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋‚˜์˜ค๊ฒŒ ๋˜๋Š” ์„ ์ž…ํ›„์ถœ(LIFO, Last In First Out) ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. 2. ๊ตฌํ˜„ : Stack ์„ ๊ตฌํ˜„ํ•  ๋•Œ๋Š”, ์›์†Œ๋ฅผ ์ œ๊ฑฐ..

hoons-dev.tistory.com

 

 

๐Ÿ’ก  Stack ํด๋ž˜์Šค๋ฅผ ์†์ฝ”๋”ฉ(์ง๋ฌด์–ธ์–ด)์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ
public class Stack {
    int[] array;
    private int top;
    private int size;

    public Stack(int length){
        this.array = new int[length];
        this.size = length;
        this.top = -1;
    }

    public boolean isEmpty(){
        return this.top == -1;
    }

    public boolean isFull(){
        return this.top == size-1;
    }

    public void append(int value){
        if(isFull()){
            System.out.println("stack is full");
            return;
        }
        this.array[++this.top] = value;
    }

    public int pop(){
        if(isEmpty()){
            System.out.println("stack is empty");
            return -1;
        }
        return this.array[this.top--];
    }

    public static void main(String[] args) {
        Stack stack = new Stack(10);

        stack.append(1);
        stack.append(2);
        stack.append(3);

        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.pop());
    }
}

 

 

๐Ÿ’ก  Queue ํด๋ž˜์Šค๋ฅผ ์†์ฝ”๋”ฉ(์ง๋ฌด์–ธ์–ด)์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ
import java.util.LinkedList;

public class Queue {
    private LinkedList<Integer> array;

    public Queue(){
        this.array = new LinkedList<>();
    }

    public void append(Integer value){
        this.array.add(value);
    }

    public Integer popLeft(){
        if(this.array.isEmpty()){
            System.out.println("Queue is empty");
            return -1;
        }
        return this.array.removeLast();
    }

    public static void main(String[] args) {
        Queue queue = new Queue();

        queue.append(1);
        queue.append(2);

        System.out.println(queue.popLeft());
        System.out.println(queue.popLeft());
        System.out.println(queue.popLeft());
    }
}

 

 

๐Ÿ’ก  Priority Queue๊ฐ€ ๋ฌด์—‡์ด๊ณ , ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

์„ ์ž…์„ ์ถœ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ํ์™€ ๋‹ค๋ฅด๊ฒŒ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์›์†Œ๊ฐ€ ์šฐ์„ ์ ์œผ๋กœ ๋น ์ ธ๋‚˜์˜ค๊ฒŒ ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๋ฐฐ์—ด, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ, Heap์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์—๋Š” ์‚ฝ์ž…๊ณผ ์‚ญ์ œ ์—ฐ์‚ฐ์ด ๋ชจ๋‘ O(logN)์ด ๋ณด์žฅ๋œ Heap ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

2022.10.23 - [๐Ÿงช ์ปดํ“จํ„ฐ๊ณผํ•™ : CS] - [์ž๋ฃŒ๊ตฌ์กฐ] Priority Queue (์šฐ์„ ์ˆœ์œ„ ํ) ์ธํ„ฐ๋ทฐ ๋Œ€๋น„

 

[์ž๋ฃŒ๊ตฌ์กฐ] Priority Queue (์šฐ์„ ์ˆœ์œ„ ํ) ์ธํ„ฐ๋ทฐ ๋Œ€๋น„

๐Ÿ’ก 1. ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)๋ž€? ์šฐ์„  'ํ'๋Š” ์„ ์ž…์„ ์ถœ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํ์— ๋“ค์–ด์˜จ ์ˆœ์„œ๋ฅผ ์šฐ์„ ์ˆœ์œ„๋กœ ๊ฐ–๋Š” ํ์ธ ๊ฒƒ์ด๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋จผ์ € ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ

hoons-dev.tistory.com

 

 

๐Ÿ’ก  ๊ทธ๋ ‡๋‹ค๋ฉด, Heap์ด ๋ฌด์—‡์ธ์ง€ , ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ์‹œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

ํž™(Heap)์€ '์™„์ „์ด์ง„ํŠธ๋ฆฌ'๋ฉด์„œ, ๋ชจ๋“  ๋ถ€๋ชจ๋…ธ๋“œ์™€ ์ž์‹๋…ธ๋“œ ๊ฐ„์— 'ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€' ํ˜น์€ '์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€'์˜ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŠธ๋ฆฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

์ด์ง„ํŠธ๋ฆฌ๋Š” ์ž์‹๋…ธ๋“œ๋ฅผ ์ตœ๋Œ€ 2๊ฐœ๊นŒ์ง€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์™„์ „์ด์ง„ํŠธ๋ฆฌ๋Š” ๋ฆฌํ”„๋…ธ๋“œ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํŠธ๋ฆฌ๋Š” ํฌํ™” ์ด์ง„ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ , ๋ฆฌํ”„๋…ธ๋“œ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ๋“ค์€ ์™ผ์ชฝ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ์ฑ„์›Œ์ง„ ํŠธ๋ฆฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๋ฆฌํ”„๋…ธ๋“œ๋“ค์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋“ค์€ ๋ชจ๋‘ ์ž์‹์„ 2๊ฐœ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋ฆฌํ”„๋…ธ๋“œ๋“ค์€ ์ž์‹์„ ๊ฐ–์ง€ ์•Š๋Š” ํŠธ๋ฆฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

์‚ฝ์ž… ๋ฐ ์‚ญ์ œ๋ฅผ ํ•˜๋ฉด Heap์˜ ๊ตฌ์กฐ๊ฐ€ ๋ฌด๋„ˆ์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ๋‹ค์‹œ Heap์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ Heapify๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์‚ฝ์ž… ์‹œ ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ๋‹ค์Œ ์ธ๋ฑ์Šค์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ง‘์–ด๋„ฃ๊ณ  Heapify ์—ฐ์‚ฐ์„ ํ†ตํ•ด ํž™์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์‚ญ์ œ ์‹œ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ ์ œ๊ฑฐํ•˜๊ณ , ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ์˜ ์œ„ ์น˜๋ฅผ ๋ฆฌํ”„๋…ธ๋“œ๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค. ๊ทธ ํ›„ Heapfiy ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋‹ค์‹œ ํž™์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์‚ฝ์ž…๊ณผ ์‚ญ์ œ ์—ฐ์‚ฐ ๋ชจ๋‘ ํŠธ๋ฆฌ์˜ ๋†’์ด์— ๋”ฐ๋ผ ์—ฐ์‚ฐํšŸ์ˆ˜๊ฐ€ ๊ฒฐ์ •๋˜๋ฉฐ, worst case์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋‘˜ ๋‹ค O(logN)์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

 

2022.10.23 - [๐Ÿงช ์ปดํ“จํ„ฐ๊ณผํ•™ : CS] - [์ž๋ฃŒ๊ตฌ์กฐ] Priority Queue (์šฐ์„ ์ˆœ์œ„ ํ) ์ธํ„ฐ๋ทฐ ๋Œ€๋น„

 

[์ž๋ฃŒ๊ตฌ์กฐ] Priority Queue (์šฐ์„ ์ˆœ์œ„ ํ) ์ธํ„ฐ๋ทฐ ๋Œ€๋น„

๐Ÿ’ก 1. ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)๋ž€? ์šฐ์„  'ํ'๋Š” ์„ ์ž…์„ ์ถœ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํ์— ๋“ค์–ด์˜จ ์ˆœ์„œ๋ฅผ ์šฐ์„ ์ˆœ์œ„๋กœ ๊ฐ–๋Š” ํ์ธ ๊ฒƒ์ด๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋จผ์ € ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ

hoons-dev.tistory.com

 

 

 

๐Ÿ’ก  ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table)์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ Key-Value ์Œ์œผ๋กœ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ๊ฒ€์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ Θ(1)๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค.

ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” Key์™€, Key์™€ ๋งคํ•‘๋˜์–ด ์žˆ๋Š” Value๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก  ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table)์˜ ๊ฒ€์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์–ด๋–ป๊ฒŒ O(1)์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

ํ•ด์‹œ ํ…Œ์ด๋ธ”์— Key๋กœ ์ ‘๊ทผํ•˜๋ฉด, Hash Function์— Key ๊ฐ’์„ ์ง‘์–ด ๋„ฃ์–ด ๋‚˜์˜จ Hash ๊ฐ’์„ ์ €์žฅ์†Œ์˜ ์ธ๋ฑ์Šค๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Hash Function์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ œ์™ธํ•˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„ O(1)์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ๊ทธ๋ ‡๋‹ค๋ฉด Hash Collision (ํ•ด์‹œ ์ถฉ๋Œ)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‚˜์š”? ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

๋”๋ณด๊ธฐ

ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•˜๋Š” Key ๊ฐ’์€ ๋ฌดํ•œํ•˜๊ณ , Hash Function์„ ํ†ตํ•ด ๋‚˜์˜จ Hash ๊ฐ’์€ ์œ ํ•œํ•ฉ๋‹ˆ๋‹ค. (๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ.)

 

๋น„๋‘˜๊ธฐ์ง‘์˜ ์›๋ฆฌ๋Š” N+1๋งˆ๋ฆฌ์˜ ๋น„๋‘˜๊ธฐ๊ฐ€ N๊ฐœ์˜ ๋น„๋‘˜๊ธฐ ์ง‘์— ๋“ค์–ด๊ฐ„๋‹ค๋ฉด, ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ๋น„๋‘˜๊ธฐ ์ง‘์—๋Š” ๋‘ ๋งˆ๋ฆฌ ์ด์ƒ์˜ ๋น„๋‘˜๊ธฐ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ Key๋Š” ๋น„๋‘˜๊ธฐ๊ณ , Hash ์ธ๋ฑ์Šค๊ฐ€ ๋น„๋‘˜๊ธฐ ์ง‘์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, Key๋Š” ๋ฌดํ•œํ•˜๊ณ  Hash ๋Š” ์œ ํ•œํ•˜๋ฏ€๋กœ ํŠน์ • Hash Index์— ๋Œ€ํ•ด์„œ ๊ฒน์น˜๋Š” Key๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ Key์— ๋Œ€ํ•ด ๊ฐ™์€ ํ•ด์‹œ๊ฐ’์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ๋ฅผ ํ•ด์‹œ ์ถฉ๋Œ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€, Chaining ๋ฐฉ์‹๊ณผ Open Addressing ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฒด์ด๋‹(Chaining) : ์ธ๋ฑ์Šค์˜ ๋ฒ„ํ‚ท์„ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•ด, ์ด๋ฏธ ๊ฐ’์ด ์กด์žฌํ•˜๋”๋ผ๋„ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ํ•ด๋‹น ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ์‹
  • ๊ฐœ๋ฐฉ์ฃผ์†Œ๋ฒ•(Open Addressing) : ํ•ด์‹œ ์ถฉ๋Œ์ด ์ผ์–ด๋‚œ ๊ฒฝ์šฐ, ํŠน์ •ํ•œ ๊ฐ„๊ฒฉ๋งŒํผ ์ด๋™ ํ›„ ๋น„์–ด์žˆ๋Š” ์ฃผ์†Œ ๊ฐ’์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹

 

 

๐Ÿ’ก ๊ทธ๋ ‡๋‹ค๋ฉด, ์ฒด์ด๋‹ ๋ฐฉ์‹๊ณผ ๊ฐœ๋ฐฉ์ฃผ์†Œ๋ฒ•์˜ ์žฅ๋‹จ์ ์„ ๋น„๊ตํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์ฒด์ด๋‹ ๋ฐฉ์‹ : 

์žฅ์  :
1) ํ•œ์ •๋œ ์ €์žฅ์†Œ(Bucket)์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
2) ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function)์„ ์„ ํƒํ•˜๋Š” ์ค‘์š”์„ฑ์ด ์ƒ๋Œ€์ ์œผ๋กœ ์ ๋‹ค.
3) ์ƒ๋Œ€์ ์œผ๋กœ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฏธ๋ฆฌ ๊ณต๊ฐ„์„ ์žก์•„ ๋†“์„ ํ•„์š”๊ฐ€ ์—†๋‹ค.

๋‹จ์  :
1) ํ•œ Hash์— ์ž๋ฃŒ๋“ค์ด ๊ณ„์† ์—ฐ๊ฒฐ๋œ๋‹ค๋ฉด(์ ๋ฆผ ํ˜„์ƒ) ๊ฒ€์ƒ‰ ํšจ์œจ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค.
2) ์™ธ๋ถ€ ์ €์žฅ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•œ๋‹ค.
3) ์™ธ๋ถ€ ์ €์žฅ ๊ณต๊ฐ„ ์ž‘์—…์„ ์ถ”๊ฐ€๋กœ ํ•ด์•ผ ํ•œ๋‹ค.

 

๊ฐœ๋ฐฉ์ฃผ์†Œ๋ฒ• ๋ฐฉ์‹ : 

์žฅ์  :
1) ๋˜ ๋‹ค๋ฅธ ์ €์žฅ๊ณต๊ฐ„ ์—†์ด ํ•ด์‹œํ…Œ์ด๋ธ” ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
2) ๋˜ ๋‹ค๋ฅธ ์ €์žฅ๊ณต๊ฐ„์—์„œ์˜ ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ์—†๋‹ค.


๋‹จ์  :
1) ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function)์˜ ์„ฑ๋Šฅ์— ์ „์ฒด ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ์ด ์ขŒ์ง€์šฐ์ง€๋œ๋‹ค.
2) ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ์ €์žฅ์†Œ๋ฅผ ๋งˆ๋ จํ•ด ๋‘์–ด์•ผ ํ•œ๋‹ค.

 

 

๐Ÿ’ก ํ•ด์‹œ  ํ…Œ์ด๋ธ”์˜ ๋‹จ์ ์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ์š”? ์–ธ์ œ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋ ๊นŒ์š”?

๋”๋ณด๊ธฐ

์—…๋ฐ์ดํŠธ ์˜ˆ์ •

 

 

 

๐Ÿ’ก  BST (Binary Search Tree)์™€ BST์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

๋ฐ์ดํ„ฐ์˜ ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํŠธ๋ฆฌ์— ๋Œ€ํ•ด BST๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด์ง„ ํŠธ๋ฆฌ (์ž์‹์„ ์ตœ๋Œ€ 2๊ฐœ๊นŒ์ง€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ)
  • ๋ฃจํŠธ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ์™ผ์ชฝ ์ž์‹์€ ๋ฃจํŠธ ๋…ธ๋“œ๋ณด๋‹ค ๋” ์ž‘์€ ๊ฐ’์„, ์˜ค๋ฅธ์ชฝ ์ž์‹์€ ๋ฃจํŠธ ๋…ธ๋“œ๋ณด๋‹ค ๋” ํฐ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
  • ๋ฃจํŠธ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ๋Œ€ํ•ด ์œ„์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค.

 

ํƒ์ƒ‰์— ์œ ๋ฆฌํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ํŠน์ • ๊ฐ’์— ๋Œ€ํ•ด ํƒ์ƒ‰ํ•˜๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ํŠธ๋ฆฌ์˜ ๋†’์ด์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ‰๊ท ์ ์œผ๋กœ logN์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

 

๋‹ค๋งŒ, ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์™€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์ด ๋งž์ง€ ์•Š๊ณ  ํ•œ ์ชฝ์œผ๋กœ๋งŒ ์น˜์šฐ์ณ์ง„ ๊ฒฝ์šฐ์—๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด ์ž์ฒด๊ฐ€ N์ด ๋˜๋ฏ€๋กœ Worst Case์˜ ๊ฒฝ์šฐ O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก  BST์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์—๋Š” ๋ฌด์—‡์ด ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, BST์˜ ์–‘์ชฝ ๋†’์ด์˜ ๊ท ํ˜•์„ ๋งž์ถ”๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ ๊ฐœ๋Ÿ‰๋œ BST ํŠธ๋ฆฌ๋กœ์จ, AVL ํŠธ๋ฆฌ, Red-Black ํŠธ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก  AVL ํŠธ๋ฆฌ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

๋”๋ณด๊ธฐ

์—…๋ฐ์ดํŠธ ์˜ˆ์ •

 

 

๐Ÿ’ก  ํŠธ๋ฆฌ์™€ ๊ทธ๋ž˜ํ”„์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

๊ทธ๋ž˜ํ”„๋Š” ํŠธ๋ฆฌ๋ณด๋‹ค ๋” ํฌ๊ด„์ ์ธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํŠธ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์œผ๋‚˜ ๋ชจ๋“  ๊ทธ๋ž˜ํ”„๋ฅผ ํŠธ๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆœ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„๋Š” ๊ฐ ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋…ธ๋“œ์™€ ๋…ธ๋“œ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์—ฃ์ง€๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„์™€ ๋™์ผํ•˜๋‚˜, ์‚ฌ์ดํด์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก  ์ด์ง„ํŠธ๋ฆฌ์˜ ์ „์œ„ / ์ค‘์œ„ / ํ›„์œ„ ์ˆœํšŒ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”? ์„ค๋ช…ํ•˜๊ณ , ์ž์‹ ์ด ์ง๋ฌด ์–ธ์–ด๋กœ ์ˆœํšŒ ๊ฒฐ๊ณผ๋ฅผ ์ฝ”๋”ฉํ•ด๋ณด์„ธ์š”.

๋”๋ณด๊ธฐ

 

  • ๋ฃจํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ์ž‘์—…์„ V
  • ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ๋ฐฉ๋ฌธ์„ L
  • ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋ฐฉ๋ฌธ์„ R

 

  • ๋ฃจํŠธ๋ฅผ ์„œ๋ธŒ ํŠธ๋ฆฌ์— ์•ž์„œ์„œ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๋ฉด ์ „์œ„ ์ˆœํšŒ
  • ๋ฃจํŠธ๋ฅผ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ์ค‘๊ฐ„์— ๋ฐฉ๋ฌธํ•˜๋ฉด ์ค‘์œ„ ์ˆœํšŒ
  • ๋ฃจํŠธ๋ฅผ ์„œ๋ธŒ ํŠธ๋ฆฌ ๋ฐฉ๋ฌธ ํ›„์— ๋ฐฉ๋ฌธํ•˜๋ฉด ํ›„์œ„ ์ˆœํšŒ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

public class TreeOrder {
    public static void main(String[] args) {
        int[] array = {1, 3, 2, 5, 6, 4, 7, 9, 8};

        Tree tree = new Tree(array);
        tree.preOrder(1);
        System.out.println("");
        tree.inOrder(1);
        System.out.println("");
        tree.postOrder(1);
    }
}


class Tree{
    int[] binaryTree;

    public Tree(int[] array){
        int tree_size = array.length + 1;
        this.binaryTree = new int[tree_size];
        this.binaryTree[0] = 0;
        System.arraycopy(array, 0, binaryTree, 1, tree_size - 1);
    }

    public void preOrder(int idx){
        if(0 > idx | idx >= binaryTree.length){
            return;
        }
        System.out.println(this.binaryTree[idx]);
        this.preOrder(idx*2);
        this.preOrder(idx*2 + 1);
    }

    public void inOrder(int idx){
        if(0 > idx | idx >= binaryTree.length){
            return;
        }
        this.preOrder(idx*2);
        System.out.println(this.binaryTree[idx]);
        this.preOrder(idx*2 + 1);
    }

    public void postOrder(int idx){
        if(0 > idx | idx >= binaryTree.length){
            return;
        }
        this.preOrder(idx*2);
        this.preOrder(idx*2 + 1);
        System.out.println(this.binaryTree[idx]);
    }
}

 

 

๐Ÿ’ก  + Java์˜ Collections์— ๋Œ€ํ•ด์„œ ์•Œ๊ณ  ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

์—…๋ฐ์ดํŠธ ์˜ˆ์ •.

 

 

 

๐Ÿƒ‍โ™‚๏ธ ๋‹ค๋ฅธ ์งˆ๋ฌธ ๋Œ€๋น„ ์ž๋ฃŒ

[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ - โ“ช ์ฒดํฌ๋ฆฌ์ŠคํŠธ

[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘  ์ž๋ฃŒ๊ตฌ์กฐ
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ก ์•Œ๊ณ ๋ฆฌ์ฆ˜
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฃ ๋„คํŠธ์›Œํฌ
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ค ์šด์˜์ฒด์ œ
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฅ ์ž๋ฐ”(Java)
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฆ ๋ฐฑ์—”๋“œ(Java Spring ๊ธฐ๋ฐ˜)
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ง ๊ฐœ๋ฐœ๊ณตํ†ต / ์ธ์„ฑ๋ฉด์ ‘