[์ž๋ฃŒ๊ตฌ์กฐ] ์„ ํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ

2025. 10. 2. 14:34ยทโš™๏ธ CS/๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜
์ด ํฌ์ŠคํŒ…์€ ์ฃผํ™์ฒ  ์ € '๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ' 5.2์žฅ์„ ํ† ๋Œ€๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ฑ…๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ Java ์ฝ”๋“œ๋ฅผ ์˜ˆ์‹œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

 

์„ ํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ

  • ์š”์†Œ๊ฐ€ ์ผ๋ ฌ๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋…ธ๋“œ ๋‹จ์œ„๋กœ ์ €์žฅ
  • ๊ฐ ๋…ธ๋“œ๊ฐ€ ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ

 

๋ฐฐ์—ด์ฒ˜๋Ÿผ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,

๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ํฉ์–ด์ ธ ์žˆ์–ด๋„ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ˆœ์„œ๋Œ€๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

 

๋…ธ๋“œ๊ฐ€ ๋™์ ์œผ๋กœ ํ• ๋‹น๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๊ฐ€ ์‹คํ–‰ ์ค‘์— ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • ์‚ฝ์ž…/์‚ญ์ œ ์‹œ๊ฐ„ ๋ณต์žก๋„: O(1)
    • ํฌ์ธํ„ฐ ์—ฐ๊ฒฐ๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • ํƒ์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
    • ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ํ—ค๋“œ(์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ)๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ฏ€๋กœ ๋А๋ฆฝ๋‹ˆ๋‹ค.

 

ํฌ์ธํ„ฐ ์—ฐ๊ฒฐ๋งŒ ์ž˜ํ•˜๋ฉด ๋‹จ์ˆœํ•œ ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์™ธ์— ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ž๋ฐ” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ `java.util.LinkedList` ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ํŽธ๋ฆฌํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฃผ์š” ๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ ์„ค๋ช… ๋ณต์žก๋„
`add(E element)` ๋ฆฌ์ŠคํŠธ์˜ ๋งจ ๋์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ O(1)
`add(int index, E elment)` ์ง€์ •๋œ index ์œ„์น˜์— ์š”์†Œ๋ฅผ ์‚ฝ์ž… O(1)
`get(int index)` ์ง€์ •๋œ index ์œ„์น˜์˜ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ O(n)
`getFirst()` ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ O(1)
`getLast()` ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์ธ ๊ฒฝ์šฐ O(1)
๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์ธ ๊ฒฝ์šฐ O(n)
`indexOf(Object o)` ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์ฒ˜์Œ ๋‚˜ํƒ€๋‚˜๋Š” ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜ O(n)
`remove(int index)` ์ง€์ •๋œ index ์œ„์น˜์˜ ์š”์†Œ๋ฅผ ์ œ๊ฑฐ O(n)

 

LinkedList<String> list = new LinkedList<>();

// ๋งจ ์•ž ์‚ฝ์ž…/์‚ญ์ œ๋Š” O(1)
list.addFirst("A");     // O(1)
list.removeFirst();     // O(1)

// ๋งจ ๋ ์‚ฝ์ž…/์‚ญ์ œ๋Š” O(1)
list.addLast("Z");      // O(1)
list.removeLast();      // O(1)

๋ฐฐ์—ด(Array)

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

๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋น ๋ฅธ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์‚ญ์ œ์—๋Š” ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

  • ํƒ์ƒ‰/์ ‘๊ทผ ์‹œ๊ฐ„ ๋ณต์žก๋„: O(1)
    • ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ์›ํ•˜๋Š” ์š”์†Œ์— ์ฆ‰์‹œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • = ๋žœ๋ค ์ ‘๊ทผ(random access)
  • ์‚ฝ์ž…/์‚ญ์ œ ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
    • ์ค‘๊ฐ„์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…/์‚ญ์ œํ•˜๋ฉด ๊ทธ ๋’ค์— ์žˆ๋Š” ๋ชจ๋“  ์š”์†Œ๋“ค์„ ํ•œ ์นธ์”ฉ ๋ฐ€๊ฑฐ๋‚˜ ๋‹น๊ธฐ๋Š” ์ด๋™ ์ž‘์—… ํ•„์š”

 

๋ฐฐ์—ด๊ณผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํ•ต์‹ฌ ์ฐจ์ด

๊ตฌ๋ถ„ ๋ฐฐ์—ด (Array) ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Linked List)
๋ฉ”๋ชจ๋ฆฌ ๋ฐฐ์น˜ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์—ฐ์†์  ๋…ผ๋ฆฌ์ ์œผ๋กœ ์—ฐ์†์  (๋ฌผ๋ฆฌ์ ์œผ๋กœ๋Š” ๋ถ„์‚ฐ)
์ฃผ์š” ์žฅ์  ๋น ๋ฅธ ์ ‘๊ทผ (O(1)) ๋น ๋ฅธ ์‚ฝ์ž…/์‚ญ์ œ (O(1))
์ฃผ์š” ๋‹จ์  ๋А๋ฆฐ ์‚ฝ์ž…/์‚ญ์ œ (O(n)) ๋А๋ฆฐ ์ ‘๊ทผ (O(n))

 

๊ณ ์ • ํฌ๊ธฐ๋ผ๋Š” ํŠน์ง•์œผ๋กœ ์ •์  ๋ฐฐ์—ด(Static Array)์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ Java๋ฅผ ํฌํ•จํ•œ ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๊ฐ€๋ณ€ ํฌ๊ธฐ ๋ฆฌ์ŠคํŠธ ์ธํ„ฐํŽ˜์ด์Šค(`java.util.ArrayList`)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋ฉด ์ž๋™์œผ๋กœ ๋” ํฐ ๋ฐฐ์—ด์„ ์ƒˆ๋กœ ํ• ๋‹นํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ๋™์  ๋ฐฐ์—ด(Dynamic Array)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

import java.util.ArrayList;

public class ArrayExample {
    public static void main(String[] args) {
    	// ์ •์  ๋ฐฐ์—ด ์˜ˆ์‹œ
    
        // 1. ์„ ์–ธ ์‹œ ํฌ๊ธฐ(5)๋ฅผ ์ง€์ •
        int[] numbers = new int[5]; 

        // 2. ์š”์†Œ ์‚ฝ์ž… (O(1) ์ ‘๊ทผ)
        numbers[0] = 10;
        numbers[1] = 20;
        numbers[2] = 30;
        numbers[3] = 40;
        numbers[4] = 50;

        // 3. ์š”์†Œ ์ ‘๊ทผ ๋ฐ ํƒ์ƒ‰ (O(1) ์ ‘๊ทผ)
        System.out.println("์„ธ ๋ฒˆ์งธ ์š”์†Œ (์ธ๋ฑ์Šค 2): " + numbers[2]); // 30

        // 4. ํฌ๊ธฐ ๋ณ€๊ฒฝ ์‹œ๋„ (๋ถˆ๊ฐ€๋Šฅ!)
        // numbers[5] = 60; // ๐Ÿ›‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: Index 5 out of bounds for length 5

        // 5. ์ˆœํšŒ
        System.out.print("๋ฐฐ์—ด ์š”์†Œ: ");
        for (int i = 0; i < numbers.length; i++) {
            System.out.print(numbers[i] + " ");
        }
        System.out.println();
        
        // --------------------------------------------------------------------
        
         // 1. ์„ ์–ธ (์ดˆ๊ธฐ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ํ•„์š” ์—†์Œ)
        ArrayList<String> fruits = new ArrayList<>();

        // 2. ์š”์†Œ ์‚ฝ์ž… (ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ์ฆ๊ฐ€)
        fruits.add("Apple");    // O(1) (์ƒ๊ฐ O(n) ๋ฐœ์ƒ ๊ฐ€๋Šฅ)
        fruits.add("Banana");
        fruits.add("Cherry");
        
        // 3. ์ƒˆ๋กœ์šด ์š”์†Œ ์ถ”๊ฐ€ (ํฌ๊ธฐ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋‚ด๋ถ€ ๋ฐฐ์—ด ํ™•์žฅ ๋ฐ ๋ณต์‚ฌ)
        fruits.add("Grape"); // O(1) ๋˜๋Š” O(n) (๋ฐฐ์—ด ๋ณต์‚ฌ ๋ฐœ์ƒ ์‹œ)
        
        // 4. ์ˆœํšŒ
        System.out.print("ArrayList ์š”์†Œ: ");
        for (String fruit : fruits) {
            System.out.print(fruit + " ");
        }
        System.out.println();
    }
}

๋ฒกํ„ฐ(Vector)

  • ๋™์ ์œผ๋กœ ์š”์†Œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๋™์  ๋ฐฐ์—ด
  • ์ปดํŒŒ์ผ ์‹œ์ ์— ๊ฐœ์ˆ˜๋ฅผ ๋ชจ๋ฅผ ๋•Œ ์‚ฌ์šฉ
  • ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ๋น ๋ฅธ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • Java์—์„œ๋Š” ArrayList๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•ด ํ˜„์žฌ๋Š” ๋ฒกํ„ฐ๋ฅผ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

 

  • ํƒ์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„: O(1)
    • ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งจ ๋’ค์˜ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์‚ฝ์ž…ํ•˜๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„: O(1)
    • ๋ฒกํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€๋˜๋Š” ์‹œ๊ฐ„์ด O(1)์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ๋งจ ๋’ค๊ฐ€ ์•„๋‹Œ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์‚ฝ์ž…ํ•˜๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
    • ๋ฐฐ์—ด๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

 

ํ˜„์žฌ ์ž๋ฐ”์—์„œ๋Š” Vector ๋Œ€์‹  ArrayList๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ๊ณผ ๋ฉ”์†Œ๋“œ ๊ตฌ์„ฑ์ด ๊ฑฐ์˜ ๋™์ผํ•˜๋‚˜ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ๋™์ž‘ ๋ฐฉ์‹์— ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Vector๋Š” ๋ชจ๋“  public ๋ฉ”์†Œ๋“œ์— `synchronized` ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์–ด ์žˆ์–ด

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ด ์ฝ”๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ์ž ๊ธˆ(lock)์ด ๊ฑธ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Vector ํด๋ž˜์Šค๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. (Thread-safe)

 

๋ฐ˜๋ฉด ArrayList๋Š” ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ์ง€ ์•Š์•„ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (Thread-unsafe)

 

๊ทธ๋ ‡๋‹ค๊ณ  Vector๊ฐ€ ArrayList๋ณด๋‹ค ๋ฐ˜๋“œ์‹œ ์ข‹๋‹ค๊ณ  ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Vector์˜ ๋ฉ”์†Œ๋“œ๋Š” ์Šค๋ ˆ๋“œ-์„ธ์ดํ”„ํ•˜์ง€๋งŒ, Vector ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด ์ž์ฒด์—๋Š” ๋™๊ธฐํ™”๊ฐ€ ๋˜์–ด ์žˆ์ง€ ์•Š์•„ ๋™๊ธฐํ™”๊ฐ€ ์™„๋ฒฝํ•˜์ง€๋„ ์•Š๊ณ ,

๊ฐ•์ œ ๋™๊ธฐํ™” ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜์–ด์„œ ํ˜„๋Œ€์—๋Š” ArrayList๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


์Šคํƒ(Stack)

  • ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ๋กœ ๋‚˜์˜ค๋Š” ํ›„์ž…์„ ์ถœ: LIFO(Last In First Out) ๊ตฌ์กฐ

์ฃผ์š” ๋ฉ”์†Œ๋“œ

์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ์œ ์ผํ•œ ๋ถ€๋ถ„์„ Top์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด Top์„ ํ†ตํ•ด ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Top ํ•œ ๊ณณ์—์„œ๋งŒ ์—ฐ์‚ฐ์ด ์ด๋ฃจ์–ด์ง€๊ณ , ๋ฐ์ดํ„ฐ ์ด๋™์ด๋‚˜ ํƒ์ƒ‰์ด ํ•„์š”์—†์–ด O(1)๋กœ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.

๋ฉ”์†Œ๋“œ ์„ค๋ช… ์‹œ๊ฐ„ ๋ณต์žก๋„
`push()` ์Šคํƒ์˜ Top์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. O(1)
`pop()` ์Šคํƒ์˜ Top์— ์žˆ๋Š” ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ทธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. O(1)
`peek()` ์Šคํƒ์˜ Top์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ ํ™•์ธ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. O(1)
`empty()` ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ (๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š”์ง€) ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. O(1)

 

์ž๋ฐ”์˜ ์Šคํƒ ํด๋ž˜์Šค๋Š” ๋ฒกํ„ฐ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„ `java.util.Stack`์œผ๋กœ ๋”ฐ๋กœ ์กด์žฌํ•˜๋Š”๋ฐ

๋ฒกํ„ฐ ํด๋ž˜์Šค์˜ ๋‹จ์  ๋•Œ๋ฌธ์— ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ Stack ํด๋ž˜์Šค ๋Œ€์‹  Deque ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Deque(๋ฑ)์€ ์–‘์ชฝ ๋์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ์ธ๋ฐ, ํ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ๋ฌธ๋‹จ์—์„œ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•˜์ž๋ฉด, ์–‘์ชฝ ๋์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ๋กœ ๋ฑ์˜ ํ•œ ์ชฝ ๋์„ ์Šคํƒ์˜ Top์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ž๋ฐ”์˜ Deque์—์„œ๋Š” ๋ฑ์˜ ๋งจ ์•ž์ชฝ์„ ์Šคํƒ์˜ Top์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

/* Stack ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ธฐ */
Deque<String> stack = new ArrayDeque<>();

stack.push("a");
stack.push("b");
stack.push("c");
stack.push("d");
stack.push("e");

System.out.println(stack); // [a, b, c, d, e]

System.out.println(stack.pop()); // e
System.out.println(stack.pop()); // d

System.out.println(stack); // [a, b, c]

ํ(Queue)

  • ๋จผ์ € ์‚ฝ์ž…ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ์„ ์ž…์„ ์ถœ: FIFO(First In First Out) ๊ตฌ์กฐ
  • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…์€ ํ•œ์ชฝ ๋(Rear ๋˜๋Š” Tail)์—์„œ ์ด๋ฃจ์–ด์ง€๊ณ , ์‚ญ์ œ๋Š” ๋‹ค๋ฅธ ์ชฝ ๋(Front ๋˜๋Š” Head)์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ฃผ์š” ๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ ์—ญํ•  ์„ค๋ช… ์‹œ๊ฐ„ ๋ณต์žก๋„
`offer()` ๋˜๋Š” `add()` ์‚ฝ์ž… (Enqueue) ํ์˜ ๋งจ ๋’ค(Rear)์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. O(1)
`poll()` ๋˜๋Š” `remove()` ์‚ญ์ œ (Dequeue) ํ์˜ ๋งจ ์•ž(Front)์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ทธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. O(1)
`peek()` ๋˜๋Š” `element()` ํ™•์ธ (Check) ํ์˜ ๋งจ ์•ž(Front) ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ํ™•์ธ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. O(1)

 

์ž๋ฐ”์—์„œ๋Š” `LinkedList` ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ Queue ์ธํ„ฐํŽ˜์ด์Šค๋„ ํ•จ๊ป˜ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์–ด ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        // Queue ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ LinkedList๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉ
        Queue<String> queue = new LinkedList<>(); 

        // 1. offer: ๋ฐ์ดํ„ฐ ์‚ฝ์ž… (FIFO: First-In)
        queue.offer("๊ณ ๊ฐ A"); // 1๋“ฑ์œผ๋กœ ๋“ค์–ด์˜ด (Front)
        queue.offer("๊ณ ๊ฐ B");
        queue.offer("๊ณ ๊ฐ C"); // 3๋“ฑ์œผ๋กœ ๋“ค์–ด์˜ด (Rear)

        System.out.println("ํ˜„์žฌ ํ (๋Œ€๊ธฐ์—ด): " + queue); // [๊ณ ๊ฐ A, ๊ณ ๊ฐ B, ๊ณ ๊ฐ C]

        // 2. peek: Front ์š”์†Œ ํ™•์ธ
        System.out.println("๋Œ€๊ธฐ์—ด 1์ˆœ์œ„ (peek): " + queue.peek()); // ๊ณ ๊ฐ A

        // 3. poll: Front ์š”์†Œ ์‚ญ์ œ ๋ฐ ๋ฐ˜ํ™˜ (FIFO: First-Out)
        String servicedClient = queue.poll(); 
        System.out.println("์„œ๋น„์Šค ์™„๋ฃŒ (poll): " + servicedClient); // ๊ณ ๊ฐ A ์ œ๊ฑฐ

        // 4. poll ์ดํ›„ ํ ์ƒํƒœ
        System.out.println("poll ํ›„ ํ: " + queue); // [๊ณ ๊ฐ B, ๊ณ ๊ฐ C]

        // 5. ๋‹ค์Œ ์ˆœ์œ„ ํ™•์ธ
        System.out.println("๋‹ค์Œ ์ˆœ์œ„: " + queue.peek()); // ๊ณ ๊ฐ B
    }
}

์ฐธ๊ณ ์ž๋ฃŒ

[์ž๋ฃŒ๊ตฌ์กฐ with C์–ธ์–ด] ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ (Linked List)

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์œ„ํ‚ค๋ฐฑ๊ณผ

๐Ÿงฑ ์ž๋ฐ” Vector ๊ตฌ์กฐ & ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ

๐Ÿงฑ ArrayList vs Vector ๋™๊ธฐํ™” & ์„ฑ๋Šฅ ์ฐจ์ด ๋น„๊ต
๐Ÿงฑ ์ž๋ฐ” Stack ๊ตฌ์กฐ & ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ

 

 

 

 

 

 

'โš™๏ธ CS > ๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ž๋ฃŒ๊ตฌ์กฐ] ๋น„์„ ํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ ๊ฐœ๋… ์ •๋ฆฌ | ๊ทธ๋ž˜ํ”„, ํŠธ๋ฆฌ, ํž™, ์šฐ์„ ์ˆœ์œ„ ํ, ์…‹, ๋งต, ํ•ด์‹œ ํ…Œ์ด๋ธ”  (0) 2025.10.18
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„ + Big O ํ‘œ๊ธฐ๋ฒ•  (0) 2025.10.02
[์ž๋ฃŒ๊ตฌ์กฐ][์•Œ๊ณ ๋ฆฌ์ฆ˜] Big O ํ‘œ๊ธฐ๋ฒ•  (1) 2025.02.13
'โš™๏ธ CS/๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์ž๋ฃŒ๊ตฌ์กฐ] ๋น„์„ ํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ ๊ฐœ๋… ์ •๋ฆฌ | ๊ทธ๋ž˜ํ”„, ํŠธ๋ฆฌ, ํž™, ์šฐ์„ ์ˆœ์œ„ ํ, ์…‹, ๋งต, ํ•ด์‹œ ํ…Œ์ด๋ธ”
  • [์•Œ๊ณ ๋ฆฌ์ฆ˜] ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„ + Big O ํ‘œ๊ธฐ๋ฒ•
  • [์ž๋ฃŒ๊ตฌ์กฐ][์•Œ๊ณ ๋ฆฌ์ฆ˜] Big O ํ‘œ๊ธฐ๋ฒ•
์†Œ์˜ ๐Ÿ€
์†Œ์˜ ๐Ÿ€
Hello World โœจ
  • ์†Œ์˜ ๐Ÿ€
    Soyoung's Dev Lab
    ์†Œ์˜ ๐Ÿ€
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ธ€์“ฐ๊ธฐ ๊ด€๋ฆฌ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (79)
      • ๐Ÿ“ข ๊ฒŒ์‹œํŒ (0)
      • ๐ŸŒฟSpring (20)
      • โ˜•Java (7)
        • ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (7)
      • โš™๏ธ CS (26)
        • ๐Ÿ›œ ๋„คํŠธ์›Œํฌ (5)
        • ๐Ÿ“Š ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
        • ๐Ÿ–ฒ๏ธ์šด์˜์ฒด์ œ (9)
        • ๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜ (4)
      • ๐Ÿ“ค ๋ฐฐํฌ (4)
        • Docker (4)
        • AWS (0)
      • ๐Ÿ“ฐ ๊ธฐํƒ€ ๊ฐœ๋ฐœ ์ž๋ฃŒ (12)
      • ๐Ÿ–ฅ๏ธ ํ”„๋กœ์ ํŠธ (0)
      • ๐Ÿ‘ฉ‍๐Ÿ’ป ํ™œ๋™ & ํ›„๊ธฐ (1)
      • ๐Ÿต ์ด์•ผ๊ธฐ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํƒœ๊ทธ
  • ๋งํฌ

    • github
    • velog
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    Spring
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    GIT
    ์ž๋ฃŒ๊ตฌ์กฐ
    ์ฝ”๋“œ์ž‡ ์Šคํ”„๋ฆฐํŠธ
    ์šด์˜์ฒด์ œ
    ๊ธฐ์ˆ  ๋ฉด์ ‘
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    ์œ„ํด๋ฆฌ ํŽ˜์ดํผ
    ์„œ๋ฒ„
    Java
    docker
    ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    Spring Security
    ๊ฐœ๋ฐœ
    ๋„คํŠธ์›Œํฌ
    ๋ฐฐํฌ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์†Œ์˜ ๐Ÿ€
[์ž๋ฃŒ๊ตฌ์กฐ] ์„ ํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ
์ƒ๋‹จ์œผ๋กœ

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