์•Œ๊ณ ๋ฆฌ์ฆ˜๐Ÿฅš/๊ฐœ๋…

[ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ] 1. ์Šคํƒ๊ณผ ํ

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 1. 3. 23:55
728x90

 

์Šคํƒ๊ณผ ํ

 

* ์ด ๊ธ€์€ ๋„ค์ด๋ฒ„ ๋ถ€์ŠคํŠธ ์ฝ”์Šค์˜ ์ธ๊ณต์ง€๋Šฅ(AI) ๊ธฐ์ดˆ ๋‹ค์ง€๊ธฐ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

์‚ฌ๋‹ด)
์–ผ๋งˆ์ „ ์ธํ„ด ๋ชจ์˜๋ฉด์ ‘์— ์šฐ์—ฐํžˆ ์ฐธ์—ฌํ•  ๊ธฐํšŒ๊ฐ€ ์ƒ๊ฒผ๋Š”๋ฐ ์Šคํƒ๊ณผ ํ๋ฅผ ํ—ท๊ฐˆ๋ ค๋ฒ„๋ ธ๋‹ค.
ํ”„๋กœ์ ํŠธ ์œ„์ฃผ๋กœ ์ง„ํ–‰๋˜๋Š” ์ˆ˜์—…์ด ๋งŽ์•˜์–ด์„œ ๊ธฐ์ดˆ๋ฅผ ์žŠ์–ด๋ฒ„๋ฆฐ๊ฒŒ ํ‹€๋ฆผ์—†๋‹ค. 0ใ…‡0
๋‹ค์‹œ ์ดˆ์‹ฌ์œผ๋กœ ๋Œ์•„๊ฐ€ ๊ผผ๊ผผํ•˜๊ฒŒ ์ •๋ฆฌํ•ด ๋ณด์ž.

 

1) ์Šคํƒ Stack    (=์‚ฌ๋‹ค๋ฆฌ. ์ œ์ผ ๋‚˜์ค‘์— ์˜ฌ๋ผ๊ฐ„ ์‚ฌ๋žŒ์ด ๋จผ์ € ๋‚ด๋ ค์™€์•ผ ์ „ ์‚ฌ๋žŒ๋“ค์ด ๋‚ด๋ ค์˜ด)

- ๋‚˜์ค‘์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

- LIFO (Last In First Out)

- ๊ธฐ๋Šฅ : Push, Pop, Top, Empty

- ๊ตฌํ˜„ : List

  • Push : ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ํ•จ์ˆ˜
list.append(element)
  • Pop : ์ œ์ผ ๋‚˜์ค‘์˜ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ํ•จ์ˆ˜
list.pop()
  • Top : ์ œ์ผ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜
  • isEmpty  : ์Šคํƒ์ด ๋น„์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜

 

์ฐธ๊ณ ) ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ์Šคํƒ์„ ๊ตฌํ˜„ํ•ด๋ณด์ž.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Class Stack():
    def __init__(self):
        self.stack=[]
    def push(self, element):
        self.stack.append(element)
    def isEmpty(self):
        if(len(self.stack)==0):
            return True
        return False
    def top(self):
        if(self.isEmpty()):
            return -1
        return self.stack[-1]
    def pop(self):
        if(self.isEmpty()):
            return -1
        return self.stack.pop()
cs

 

์˜ˆ์ œ) ์Šคํƒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด ์ž…๋ ฅ๋œ ๊ธ€์ž๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•ด ๋ณด์ž.

word=input() #๋ฌธ์ž์—ด ์ž…๋ ฅ
word_list=list(word) #๋ฌธ์ž์—ด์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜
for word_len in range(len(word_list)):
	word_list.pop()

 

2) ํ Queue    (=์ฃผ๋ฌธ. ๋จผ์ € ๋“ค์–ด๊ฐ„ ์ฃผ๋ฌธ์„ ์šฐ์„ ์œผ๋กœ ์ฒ˜๋ฆฌ)

- ๋จผ์ € ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

- FIFO (First In First Out)

- ๊ธฐ๋Šฅ : Put, Get, isEmpty

- ๊ตฌํ˜„ : List

  • Put : ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ํ•จ์ˆ˜
list.append(element)
  • Get: ์ œ์ผ ์ฒ˜์Œ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ํ•จ์ˆ˜
list.pop(0)
  • isEmpty  : ํ๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜

 

์ฐธ๊ณ ) ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ํ์„ ๊ตฌํ˜„ํ•ด๋ณด์ž.

1
2
3
4
5
6
7
8
9
10
11
12
13
Class Queue():
    def __init__(self):
        self.queue=[]
    def put(self, element):
        self.queue.append(element)
    def isEmpty(self):
        if(len(self.queue)==0):
            return True
        return False
    def get(self):
        if(self.isEmpty()):
            return -1
        return self.queue.pop(0)
cs

 

3) ํŒŒ์ด์ฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ ๋ชจ๋“ˆ

์Šคํƒ์€ ์ผ๋ฐ˜ ๋ฆฌ์ŠคํŠธ๋กœ๋„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,

ํ์˜ ๊ฒฝ์šฐ get()ํ•จ์ˆ˜ ์‹คํ–‰์‹œ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1)์ด ์•„๋‹Œ O(N)์ด ๊ฑธ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋”ฐ๋ผ์„œ deque ๋ชจ๋“ˆ์„ ๋ณ„๋„๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

import queue

1
2
3
4
5
6
7
8
9
10
import queue
 
#ํ ๋ชจ๋“ˆ์˜ ํ ํด๋ž˜์Šค ๊ฐ์ฒด ์„ ์–ธ
quque_one= queue.Queue()
 
#์„ ์–ธ ๋œ ํ ๊ฐ์ฒด์— ์š”์†Œ ์ž…๋ ฅ
data.put(element)
 
#ํ ๊ฐ์ฒด์—์„œ ์š”์†Œ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๊ธฐ :FIFO
print(data.get())
cs

 

 

import collections.deque

(doubled ended queue๋กœ ์–‘๋ฐฉํ–ฅ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„๋จ)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from collections import deque
 
#๋””ํ ๋ชจ๋“ˆ์˜ ๋””ํ ํด๋ž˜์Šค ๊ฐ์ฒด ์„ ์–ธ
queue_two = deque()
 
#์„ ์–ธ ๋œ ํ ๊ฐ์ฒด์— ์š”์†Œ ์ž…๋ ฅ
##์ผ๋ฐ˜
queue_two .append(element)
##์™ผ์ชฝ์— ์š”์†Œ ์ž…๋ ฅ
queue_two .appendleft(element)
##์ค‘๊ฐ„(list_index)์— ์š”์†Œ ์ž…๋ ฅ
queue_two .insert(list_index, element)
 
#์„ ์–ธ ๋œ ํ ๊ฐ์ฒด์—์„œ ์š”์†Œ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๊ธฐ
##์ผ๋ฐ˜
print(queue_two.popleft())
##์˜ค๋ฅธ์ชฝ
print(queue_two.pop())
 
cs

 

728x90