Home > Algorithm > 2024 > ๐Ÿ“ฆ[DS,Algorithm] LinkedList๋ฅผ ์‚ฌ์šฉํ•œ Deque.

๐Ÿ“ฆ[DS,Algorithm] LinkedList๋ฅผ ์‚ฌ์šฉํ•œ Deque.
DataStructure Algorithm

1๏ธโƒฃ LinkedList๋ฅผ ์‚ฌ์šฉํ•œ Deque.

โ€˜LinkedListโ€˜ ๋Š” โ€˜Dequeโ€˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜๋กœ, ์–‘์ชฝ ๋์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ ์ž๋ฃŒ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

โ€˜LinkedListโ€˜ ๋Š” โ€˜Dequeโ€˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ โ€˜Listโ€˜, โ€˜Queueโ€˜ ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ตฌํ˜„ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๏ธโƒฃ ์ฃผ์š” ํŠน์ง•.

  • ์ด์ค‘ ๋ ํ : ์–‘์ชฝ ๋์—์„œ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ : ๊ฐ ๋…ธ๋“œ๋Š” ์ด์ „ ๋…ธ๋“œ์™€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

  • ๋น„๋™๊ธฐ์  : โ€˜LinkedListโ€˜ ๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ ๋™๊ธฐํ™”๋œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3๏ธโƒฃ ์ฃผ์š” ๋ฉ”์„œ๋“œ.

์‚ฝ์ž… ์—ฐ์‚ฐ.

  • โ€˜addFirst(E e)โ€™ : ์ง€์ •๋œ ์š”์†Œ๋ฅผ ๋ฑ์˜ ์•ž์ชฝ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • โ€˜addLast(E e)โ€™ : ์ง€์ •๋œ ์š”์†Œ๋ฅผ ๋ฑ์˜ ๋’ค์ชฝ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • โ€˜offerFirst(E e)โ€™ : ์ง€์ •๋œ ์š”์†Œ๋ฅผ ๋ฑ์˜ ์•ž์ชฝ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • โ€˜offerLast(E e)โ€™ : ์ง€์ •๋œ ์š”์†Œ๋ฅผ ๋ฑ์˜ ๋’ค์ชฝ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์‚ญ์ œ ์—ฐ์‚ฐ.

  • โ€˜removeFirst()โ€™ : ๋ฑ์˜ ์•ž์ชฝ์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • โ€˜removeLast()โ€™ : ๋ฑ์˜ ๋’ค์ชฝ์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • โ€˜pollFirst()โ€™ : ๋ฑ์˜ ์•ž์ชฝ์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • โ€˜pollLast()โ€™ : ๋ฑ์˜ ๋’ค์ชฝ์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์กฐํšŒ ์—ฐ์‚ฐ.

  • โ€˜getFirst()โ€™ : ๋ฑ์˜ ์•ž์ชฝ์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • โ€˜getLast()โ€™ : ๋ฑ์˜ ๋’ค์ชฝ์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • โ€˜peekFirst()โ€™ : ๋ฑ์˜ ์•ž์ชฝ์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • โ€˜peekLast()โ€™ : ๋ฑ์˜ ๋’ค์ชฝ์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์Šคํƒ ์—ฐ์‚ฐ.

  • โ€˜push(E e)โ€™ : ์Šคํƒ์˜ ๋งจ ์œ„์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.(FIFO, First In First Out)

  • โ€˜pop()โ€™ : ์Šคํƒ์˜ ๋งจ ์œ„์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.(LIFO, Last In First Out)

4๏ธโƒฃ ์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์‚ฝ์ž…๊ณผ ์‚ญ์ œ ์—ฐ์‚ฐ : โ€˜addFirstโ€˜, โ€˜addLastโ€˜, โ€˜removeFirstโ€˜, โ€˜removeLastโ€˜, โ€˜offerFirstโ€˜, โ€˜offerLastโ€˜, โ€˜pollFirstโ€˜, โ€˜pollLastโ€˜ ๋“ฑ์˜ ์—ฐ์‚ฐ์€ O(1)์ž…๋‹ˆ๋‹ค.
    • ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–‘์ชฝ ๋์—์„œ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋Š” ์ƒ์ˆ˜ ์‹œ๊ฐ„ ๋‚ด์— ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์กฐํšŒ ์—ฐ์‚ฐ : โ€˜getFirstโ€˜, โ€˜getLastโ€˜, โ€˜peekFirstโ€˜, โ€˜peekLastโ€˜ ๋“ฑ์˜ ์—ฐ์‚ฐ์€ O(1)์ž…๋‹ˆ๋‹ค.

  • ์ž„์˜ ์ ‘๊ทผ ์—ฐ์‚ฐ( **โ€˜get(int index)โ€˜, โ€˜set(int index, E element)โ€™ ๋“ฑ) :** ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•œ ์ ‘๊ทผ ์—ฐ์‚ฐ์€ ๋ฆฌ์ŠคํŠธ์˜ ์ค‘๊ฐ„์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(n) ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

5๏ธโƒฃ ์ฝ”๋“œ ์˜ˆ์‹œ.

์•„๋ž˜ ์ฝ”๋“œ๋Š” โ€˜LinkedListโ€˜ ๋ฅผ โ€˜Dequeโ€˜ ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

import java.util.Deque;
import java.util.LinkedList;

public class LinkedListDequeExample {

	public static void main(String[] args) {
		// LinkedList๋กœ Deque ์ƒ์„ฑ
		Deque<Integer> deque = new LinkedList<>();

		// ์š”์†Œ ์‚ฝ์ž…
		deque.addFirst(1);
		deque.addLast(2);
		deque.offerFirst(0);
		deque.offerLast(3);

		// ์š”์†Œ ์กฐํšŒ
		System.out.println("First element: " + deque.getFirst());
		System.out.println("Last element: " + deque.getLast());
		System.out.println("Peek first element: " + deque.peekFirst());
		System.out.println("Peek last element: " + deque.peekLast());

		// ์š”์†Œ ์‹์ œ
		System.out.println("Removed first element: " + deque.removeFirst());
		System.out.println("Removed last element: " + deque.removeLast());
		System.out.println("Poll first element: " + deque.pollFirst());
		System.out.println("Poll last element: " + deque.pollLast());

		// ๋ฑ์˜ ํฌ๊ธฐ์™€ ๋น„์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€ ํ™•์ธ
		System.out.println("Deque size: " + deque.size());
		System.out.println("Is deque empty? " + deque.isEmpty());

		// ์Šคํƒ ์—ฐ์‚ฐ.
		deque.push(4);
		System.out.println("Pushed element: " + deque.peekFirst());
		System.out.println("Popped element: " + deque.pop());
	}
}
/*
=== ์ถœ๋ ฅ ===

First element: 0
Last element: 3
Peek first element: 0
Peek last element: 3
Removed first element: 0
Removed last element: 3
Poll first element: 1
Poll last element: 2
Deque size: 0
Is deque empty? true
Pushed element: 4
Popped element: 4
*/

๐Ÿ™‹โ€โ™‚๏ธ ์„ค๋ช….

    1. ๋ฒ ์—ด ์ดˆ๊ธฐํ™” : โ€˜DEFAULT_CAPACITYโ€˜ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , โ€˜headโ€˜, โ€˜tailโ€˜, โ€˜sizeโ€˜ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™” ํ•ฉ๋‹ˆ๋‹ค.
    1. ์‚ฝ์ž… ์—ฐ์‚ฐ( **โ€˜addFirstโ€˜, โ€˜addLastโ€˜) :** ์š”์†Œ๋ฅผ ๋ฑ์˜ ์ฒซ ๋ฒˆ์งธ ๋˜๋Š” ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    1. ์‚ญ์ œ ์—ฐ์‚ฐ( **โ€˜removeFirstโ€˜, โ€˜removeLastโ€˜) :** ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์™€ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๊ฐ๊ฐ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    1. ์กฐํšŒ ์—ฐ์‚ฐ( **โ€˜getFirstโ€˜, โ€˜getLastโ€˜, โ€˜peekFirstโ€˜, โ€˜peekLastโ€˜) :** ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์™€ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    1. ๊ธฐํƒ€ ๋ฉ”์„œ๋“œ : โ€˜sizeโ€˜ ์™€ โ€˜isEmptyโ€˜ ๋ฉ”์„œ๋“œ๋Š” ๋ฑ์˜ ํฌ๊ธฐ์™€ ๋น„์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    1. ์Šคํƒ ์—ฐ์‚ฐ( **โ€˜pushโ€˜, โ€˜popโ€˜) :** ์Šคํƒ์˜ ๋งจ ์œ„์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์Šคํƒ์˜ ๋งจ ์œ„์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์˜ˆ์‹œ ์ฝ”๋“œ์—์„œ๋Š” โ€˜LinkedListโ€˜ ๋ฅผ โ€˜Dequeโ€˜ ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
โ€˜LinkedListโ€˜ ๋Š” ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–‘์ชฝ ๋์—์„œ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.