python_#7

hyena_leeยท2025๋…„ 10์›” 8์ผ

์ž๋ฃŒ๊ตฌ์กฐ

๋ชฉ๋ก ๋ณด๊ธฐ
10/15
post-thumbnail

โš™๏ธ Stack vs Queue vs Hash Table

๐Ÿง  1๏ธโƒฃ ๊ธฐ๋ณธ ๊ฐœ๋… ์š”์•ฝ

์ž๋ฃŒ๊ตฌ์กฐ๋œป๊ตฌ์กฐ์  ํŠน์ง•๋Œ€ํ‘œ์ ์ธ ๋™์ž‘๋น„์œ 
Stack (์Šคํƒ)โ€˜์Œ“์•„ ์˜ฌ๋ฆฐ ๊ตฌ์กฐโ€™LIFO (Last In, First Out) โ†’ ๋‚˜์ค‘์— ๋„ฃ์€ ๊ฒŒ ๋จผ์ € ๋‚˜์˜ดpush(), pop()์ ‘์‹œ๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์•„๋†“์€ ๋”๋ฏธ
Queue (ํ)โ€˜์ค„ ์„œ ์žˆ๋Š” ๊ตฌ์กฐโ€™FIFO (First In, First Out) โ†’ ๋จผ์ € ๋„ฃ์€ ๊ฒŒ ๋จผ์ € ๋‚˜์˜ดenqueue(), dequeue()๋ฒ„์Šค ์ •๋ฅ˜์žฅ ์ค„ ์„œ๊ธฐ
Hash Table (ํ•ด์‹œ ํ…Œ์ด๋ธ”)โ€˜ํ‚ค(key)-๊ฐ’(value) ์Œ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐโ€™ํ•ด์‹œ ํ•จ์ˆ˜๋กœ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผinsert(key, value), get(key)์‚ฌ์ „(dictionary)์ฒ˜๋Ÿผ ๋‹จ์–ด-๋œป ์ €์žฅ

โš™๏ธ 2๏ธโƒฃ ๋™์ž‘ ์›๋ฆฌ ๊ฐ„๋‹จํžˆ ๋ณด๊ธฐ

๐Ÿ”ธ Stack

let stack = [];
stack.push(1);   // [1]
stack.push(2);   // [1, 2]
stack.pop();     // 2 ์ œ๊ฑฐ โ†’ [1]

-> ๋‚˜์ค‘์— ๋“ค์–ด์˜จ ๊ฒŒ ๋จผ์ € ๋‚˜๊ฐ (LIFO)

๐Ÿ”ธ Queue

let queue = [];
queue.push(1);    // [1]
queue.push(2);    // [1, 2]
queue.shift();    // 1 ์ œ๊ฑฐ โ†’ [2]

-> ๋จผ์ € ๋“ค์–ด์˜จ ๊ฒŒ ๋จผ์ € ๋‚˜๊ฐ (FIFO)

๐Ÿ”ธ Hash Table

let hashTable = new Map();
hashTable.set("name", "Minnie");
hashTable.get("name"); // "Minnie"

-> key(โ€œnameโ€)๋กœ value๋ฅผ ๋ฐ”๋กœ ์ฐพ์Œ โ€” ๋น ๋ฆ„ ๐Ÿ”ฅ

โš–๏ธ 3๏ธโƒฃ ๋น„๊ต ์ •๋ฆฌ

ํ•ญ๋ชฉStackQueueHash Table
์ €์žฅ ๋ฐฉ์‹์ˆœ์ฐจ์  (์œ„์—์„œ ์Œ“์Œ)์ˆœ์ฐจ์  (์•ž๋’ค๋กœ ๋‚˜๊ฐ)key-value ์Œ
์ ‘๊ทผ ์ˆœ์„œLIFOFIFOkey๋กœ ์ง์ ‘ ์ ‘๊ทผ
์‚ฌ์šฉ ์˜ˆ์‹œํ•จ์ˆ˜ ํ˜ธ์ถœ(์ฝœ์Šคํƒ), ๋˜๋Œ๋ฆฌ๊ธฐ(undo)๋Œ€๊ธฐ์—ด, ํ”„๋ฆฐํ„ฐ ์ž‘์—…๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์บ์‹œ
์†๋„๋น ๋ฆ„ (O(1))๋น ๋ฆ„ (O(1))๋งค์šฐ ๋น ๋ฆ„ (ํ‰๊ท  O(1))
์–ธ์–ด์—์„œ ์˜ˆJS์˜ Array, Python์˜ listJS์˜ Array, Python dequeJS Map/Object, Python dict

๐Ÿ’ก 4๏ธโƒฃ ์˜ˆ์‹œ๋กœ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

์ƒํ™ฉ์–ด๋–ค ๊ตฌ์กฐ?์ด์œ 
์›น ๋ธŒ๋ผ์šฐ์ € โ€˜๋’ค๋กœ ๊ฐ€๊ธฐโ€™Stack๊ฐ€์žฅ ์ตœ๊ทผ ํŽ˜์ด์ง€๋ถ€ํ„ฐ ๊บผ๋ƒ„
์€ํ–‰ ๋Œ€๊ธฐํ‘œQueue๋จผ์ € ์˜จ ์‚ฌ๋žŒ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ
์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ๋กœ ์ด๋ฆ„ ์ฐพ๊ธฐHash Table๊ณ ์œ  ํ‚ค๋กœ ๋ฐ”๋กœ ์ฐพ์Œ

๐Ÿง  1๏ธโƒฃ ๊ธฐ๋ณธ ๊ฐœ๋… ์š”์•ฝ

์ž๋ฃŒ๊ตฌ์กฐ๋œป๊ตฌ์กฐ์  ํŠน์ง•๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐฉ์‹๋น„์œ 
Array (๋ฐฐ์—ด)์—ฐ์†๋œ ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฐจ๋ก€๋กœ ์ €์žฅํ•œ ๋ฉ์–ด๋ฆฌ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ์˜† ์นธ๊ณผ ๋ถ™์–ด์žˆ๋Š” ์•„ํŒŒํŠธ
Linked List (์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)๋…ธ๋“œ(node) ๋‹จ์œ„๋กœ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๊ฐ€ ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ํฉ์–ด์ ธ ์žˆ์ง€๋งŒ ๋งํฌ๋กœ ์—ฐ๊ฒฐ์ฒด์ธ ๋ชฉ๊ฑธ์ด์ฒ˜๋Ÿผ ๊ณ ๋ฆฌ๋กœ ์—ฐ๊ฒฐ๋œ ๊ตฌ์Šฌ

โš™๏ธ 2๏ธโƒฃ ๊ตฌ์กฐ ์ฐจ์ด ์‰ฝ๊ฒŒ ๋ณด๊ธฐ

๐Ÿ”ธ Array (๋ฐฐ์—ด)


[10] [20] [30] [40]
 โ†‘    โ†‘    โ†‘    โ†‘
์—ฐ์†๋œ ๊ณต๊ฐ„

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

[10 | next] โ†’ [20 | next] โ†’ [30 | next] โ†’ null
   (๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ด)

โš–๏ธ 3๏ธโƒฃ ๋น„๊ต ์ •๋ฆฌ ํ‘œ

ํ•ญ๋ชฉArray (๋ฐฐ์—ด)Linked List (์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)
์ €์žฅ ๋ฐฉ์‹์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌํฉ์–ด์ง„ ๋…ธ๋“œ๋“ค์„ ํฌ์ธํ„ฐ๋กœ ์—ฐ๊ฒฐ
๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ๊ณ ์ • ํฌ๊ธฐ(์ดˆ๊ธฐ ์ง€์ • ํ•„์š”)์œ ๋™์  ํฌ๊ธฐ(ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํ™•์žฅ ๊ฐ€๋Šฅ)
์‚ฝ์ž…/์‚ญ์ œ ์†๋„๋А๋ฆผ ๐Ÿ˜ข (O(n)) โ€” ์ค‘๊ฐ„ ์‚ฝ์ž… ์‹œ ์ด๋™ ํ•„์š”๋น ๋ฆ„ ๐Ÿ˜€ (O(1)) โ€” ๋งํฌ๋งŒ ์ˆ˜์ •
๊ฒ€์ƒ‰ ์†๋„๋น ๋ฆ„ (O(1)) โ€” ์ธ๋ฑ์Šค๋กœ ๋ฐ”๋กœ ์ ‘๊ทผ๋А๋ฆผ (O(n)) โ€” ์ฒ˜์Œ๋ถ€ํ„ฐ ํƒ์ƒ‰
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ ์Œ (๋ฐ์ดํ„ฐ๋งŒ ์ €์žฅ)๋งŽ์Œ (ํฌ์ธํ„ฐ๋„ ์ €์žฅ)
๋Œ€ํ‘œ ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ, ์ด๋ฏธ์ง€ ํ”ฝ์…€ ๋ฐ์ดํ„ฐ์Šคํƒ, ํ, ๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๋“ฑ

๐Ÿ’ก 4๏ธโƒฃ ์ƒํ™ฉ๋ณ„ ์„ ํƒ ๊ธฐ์ค€

์ƒํ™ฉ์–ด๋–ค ๊ฑธ ์“ฐ๋ฉด ์ข‹์„๊นŒ์ด์œ 
๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ๊ณ , ์ธ๋ฑ์Šค๋กœ ์ž์ฃผ ์ ‘๊ทผํ•ด์•ผ ํ•จโœ… Array์ธ๋ฑ์Šค ์ ‘๊ทผ์ด ๋น ๋ฆ„
๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ์ž์ฃผ ์ผ์–ด๋‚จโœ… Linked List๋งํฌ๋งŒ ๋ฐ”๊พธ๋ฉด ๋ผ์„œ ํšจ์œจ์ 
๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ํ™•๋ณดํ•ด๋„ ๊ดœ์ฐฎ์ŒArray๊ณ ์ • ํฌ๊ธฐ๋ผ ์•ˆ์ •์ 
๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์“ฐ๊ณ  ์‹ถ์ŒLinked Listํ•„์š”ํ•œ ๋งŒํผ๋งŒ ํ• ๋‹น

๐Ÿงฉ 5๏ธโƒฃ ์˜ˆ์‹œ ์ฝ”๋“œ๋กœ ๋น„๊ต (JavaScript ๊ธฐ์ค€)

๐Ÿ”ธ Array

let arr = [10, 20, 30];
arr.push(40);   // [10, 20, 30, 40]
console.log(arr[2]); // 30 (์ธ๋ฑ์Šค๋กœ ๋ฐ”๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ)

๐Ÿ”ธ Linked List (๊ฐ„๋‹จ ๊ตฌํ˜„ ์˜ˆ)


class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

let first = new Node(10);
let second = new Node(20);
first.next = second;  // 10 โ†’ 20

->Array๋Š” ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜์ง€๋งŒ,
LinkedList๋Š” โ€œ๋‹ค์Œ(next)โ€์„ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ํƒ์ƒ‰ํ•ด์•ผ ํ•จ.

๐ŸŽฏ ์ •๋ฆฌ ์š”์•ฝ ํ•œ ์ค„

๐Ÿ“ฆ Array: ๋น ๋ฅธ ์ ‘๊ทผ, ๋А๋ฆฐ ์‚ฝ์ž…
๐Ÿ”— Linked List: ๋А๋ฆฐ ์ ‘๊ทผ, ๋น ๋ฅธ ์‚ฝ์ž…

profile
์‹ค์ˆ˜๋ฅผ ๋‘๋ ค์›Œ ๋ง๊ณ  ๊ณ„์† ๋„์ „ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์—ฌ์ •!

0๊ฐœ์˜ ๋Œ“๊ธ€