๐์๊ณ ๋ฆฌ์ฆ | ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ์คํฐ๋
๐ Info
โ ๋งค์ผ ์ด์ํญ ์ ๊ฐ์ธ ํ ๋น๋์ด ์ฌ๋ผ์จ๋ค.
โ ๋งค์ผ ํ ๋น๋์ ์ฑ์ฐ์ง ๋ชปํ๋ฉด ๋ฒ๊ธํญ ์ ๋ฒ๊ธ์ด ์์ธ๋ค.
๐์์ธํ
- [๋ฒ๊ธ ์ ์ฑ
](https://github.com/gudals-kim/Nobrain-study/issues/24#issue-1074549551)
๐ ๋ชฉํ
โ ๋ฐฑ์ค ๊ณจ๋ ์ด์
โ ์ผ์ฑ SW ์ญ๋ ํ
์คํธ ๋ค ํ๊ธฐ
โ ๊ธฐ์ด ์๊ณ ๋ฆฌ์ฆ, ์๋ฃ๊ตฌ์กฐ ์๋ฒฝ ์ดํด
๐ ์๋ฃ๊ตฌ์กฐ ๊ฐ๋
๐ ๋ฐฐ์ด ๊ฐ๋
์ ๋ฆฌ
> ๋ฐฐ์ด ๊ฐ๋
> ------------
> - ๋ฐ์ดํฐ๋ฅผ ๋์ดํ๊ณ , ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ฑ์ค์ ๋์ํ๋๋ก ๊ตฌ์ฑํ ๋ฐ์ดํฐ ๊ตฌ์กฐ
> - ํ์ด์ฌ์์๋ ๋ฆฌ์คํธ ํ์
์ด ๋ฐฐ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํจ
> ------------
## 1. ๋ฐฐ์ด์ด ํ์ํ ์ด์
- ๊ฐ์ ์ข
๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
- ๊ฐ์ ์ข
๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ์ฅํ๋ค.
## 2. ๋ฐฐ์ด์ ์ฅ์
- ๋น ๋ฅธ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
## 3. ๋ฐฐ์ด์ ๋จ์
- ๊ณต๊ฐ์ ๋ญ๋น๊ฐ ์์ ์ ์๊ณ , ๋ฐ์ดํฐ์ ์ถ๊ฐ ๋ฐ ์ญ์ ๊ฐ ๋ฒ๊ฑฐ๋กญ๋ค.
- ๋ฏธ๋ฆฌ ๊ณต๊ฐ์ ์ง์ ํด์ผ ํ๋ค.
## 4. ํ์ด์ฌ์์์ ๋ฐฐ์ด
- ํ์ด์ฌ ๋ฆฌ์คํธ ํ์ฉ
```
# 1์ฐจ์ ๋ฐฐ์ด
data = [1,2,3,4,5]
print (data)
์ถ๋ ฅ > [1,2,3,4,5]
```
```
# 2์ฐจ์ ๋ฐฐ์ด : ๋ฆฌ์คํธ๋ก ๊ตฌํ์
data = [[1,2,3],[4,5,6],[7,8,9]]
print(data)
print(data[0])
print(data[1][2])
print(data[0][2])
์ถ๋ ฅ > [[1,2,3],[4,5,6],[7,8,9]] # data
์ถ๋ ฅ > [1,2,3] # data[0]
์ถ๋ ฅ > 6 #data[1][2]
์ถ๋ ฅ > 3 #data[0][2]
```
### ํ์ด์ฌ ์ฐ์ต ๋ฌธ์ 1
- ๋ค์ dataset ์์ ์ ์ฒด ์ด๋ฆ ์์ M์ด ๋ช๋ฒ ๋์๋์ง ๋น๋์ ์ถ๋ ฅํ๊ธฐ
```
dataset = ['Braund, Mr. Owen Harris',
'Cumings, Mrs. John Bradley (Florence Briggs Thayer)',
'Heikkinen, Miss. Laina',
'Futrelle, Mrs. Jacques Heath (Lily May Peel)',
'Allen, Mr. William Henry',
'Moran, Mr. James',
'McCarthy, Mr. Timothy J',
'Palsson, Master. Gosta Leonard',
'Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)',
'Nasser, Mrs. Nicholas (Adele Achem)',
'Sandstrom, Miss. Marguerite Rut',
'Bonnell, Miss. Elizabeth',
'Saundercock, Mr. William Henry',
'Andersson, Mr. Anders Johan',
'Vestrom, Miss. Hulda Amanda Adolfina',
'Hewlett, Mrs. (Mary D Kingcome) ',
'Rice, Master. Eugene',
'Williams, Mr. Charles Eugene',
'Vander Planke, Mrs. Julius (Emelia Maria Vandemoortele)',
'Masselmani, Mrs. Fatima',
'Fynney, Mr. Joseph J',
'Beesley, Mr. Lawrence',
'McGowan, Miss. Anna "Annie"',
'Sloper, Mr. William Thompson',
'Palsson, Miss. Torborg Danira',
'Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson)',
'Emir, Mr. Farred Chehab',
'Fortune, Mr. Charles Alexander',
'Dwyer, Miss. Ellen "Nellie"',
'Todoroff, Mr. Lalio']
```
```
๋น๋์ = 0
for data in dataset:
for i in reange(len(data)):
if data[i] == 'M' :
๋น๋์ += 1
print(๋น๋์)
์ถ๋ ฅ > 38
```
๐ ํ ๊ฐ๋
์ ๋ฆฌ
## ํ (Queue)
### 1. ํ ๊ตฌ์กฐ
* ์ค์ ์๋ ํ์์ ์ ์ฌ
* ๊ฐ์ฅ ๋จผ์ ๋ฃ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฅ ๋จผ์ ๊บผ๋ผ ์ ์๋ ๊ตฌ์กฐ
- ์์์ ์์ ๊ฐ์ฅ ๋จผ์ ์ค์ ์ ์ฌ๋์ด ์ ์ผ ๋จผ์ ์์์ ์ ์
์ฅํ๋ ๊ฒ๊ณผ ๋์ผ
- FIFO(First-In, First-Out) ๋๋ LILO(Last-In, Last-Out) ๋ฐฉ์์ผ๋ก ์คํ๊ณผ ๊บผ๋ด๋ ์์๊ฐ ๋ฐ๋
* ์ถ์ฒ: http://www.stoimen.com/blog/2012/06/05/computer-algorithms-stack-and-queue-data-structure/
### 2. ์์๋ ์ฉ์ด
* Enqueue: ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๊ธฐ๋ฅ
* Dequeue: ํ์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ ๊ธฐ๋ฅ
* Visualgo ์ฌ์ดํธ์์ ์์ฐํด๋ณด๋ฉฐ ์ดํดํ๊ธฐ (enqueue/dequeue ๋ง ํด๋ฆญํด๋ณด๋ฉฐ): https://visualgo.net/en/list
### 3. ํ์ด์ฌ queue ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉํด์ ํ ์๋ฃ ๊ตฌ์กฐ ์ฌ์ฉํ๊ธฐ
* **queue ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ๋ค์ํ ํ ๊ตฌ์กฐ๋ก Queue(), LifoQueue(), PriorityQueue() ์ ๊ณต**
* ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ ํ๋ก๊ทธ๋จ์ ๋ฐ๋ผ ์ ํฉํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉ
- Queue(): ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ ์๋ฃ ๊ตฌ์กฐ
- LifoQueue(): ๋์ค์ ์
๋ ฅ๋ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ์ถ๋ ฅ๋๋ ๊ตฌ์กฐ (์คํ ๊ตฌ์กฐ๋ผ๊ณ ๋ณด๋ฉด ๋จ)
- PriorityQueue(): ๋ฐ์ดํฐ๋ง๋ค ์ฐ์ ์์๋ฅผ ๋ฃ์ด์, ์ฐ์ ์์๊ฐ ๋์ ์์ผ๋ก ๋ฐ์ดํฐ ์ถ๋ ฅ
> ์ผ๋ฐ์ ์ธ ํ ์ธ์ ๋ค์ํ ์ ์ฑ
์ด ์ ์ฉ๋ ํ๋ค์ด ์์
#### โ 3.1. Queue()๋ก ํ ๋ง๋ค๊ธฐ (๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ, FIFO(First-In, First-Out))
```
import queue #ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
data_queue = queue.Queue() # ๋ณ์๋ฅผ Queue๋ก ์ ์ธ
data_queue.put("funcoding") # put์ ํตํ ๋ฐ์ดํฐ ์ถ๊ฐ
data_queue.put(1)
data_queue.qsize() # Queue์ ํฌ๊ธฐ ์ถ๋ ฅ
data_queue.get() # Queue ๋ฐ์ดํฐ ๋ฝ๊ธฐ
data_queue.get()
```
```
์ถ๋ ฅ > 2 #data_queue.qsize()
์ถ๋ ฅ > funcoding #data_queue.get()
์ถ๋ ฅ > 1 #data_queue.get()
```
#### โ 3.2. LifoQueue()๋ก ํ ๋ง๋ค๊ธฐ (LIFO(Last-In, First-Out))
```
import queue
data_queue = queue.LifoQueue()
data_queue.put("funcoding")
data_queue.put(1)
data_queue.qsize()
data_queue.get()
```
```
์ถ๋ ฅ > 2 #data_queue.qsize()
์ถ๋ ฅ > 1 #data_queue.get()
```
#### โ 3.3. PriorityQueue()๋ก ํ ๋ง๋ค๊ธฐ
```
import queue
data_queue = queue.PriorityQueue()
data_queue.put((10, "korea"))
data_queue.put((5, 1))
data_queue.put((15, "china"))
data_queue.qsize()
data_queue.get()
data_queue.get()
```
```
์ถ๋ ฅ > 3 #data_queue.qsize()
์ถ๋ ฅ > (5, 1) #data_queue.get()
์ถ๋ ฅ > (10, 'korea') #data_queue.get()
```
### โ ์ฐธ๊ณ : ์ด๋์ ํ๊ฐ ๋ง์ด ์ฐ์ผ๊น?
- ๋ฉํฐ ํ์คํน์ ์ํ ํ๋ก์ธ์ค ์ค์ผ์ฅด๋ง ๋ฐฉ์์ ๊ตฌํํ๊ธฐ ์ํด ๋ง์ด ์ฌ์ฉ๋จ (์ด์์ฒด์ ์ฐธ์กฐ)
> ํ์ ๊ฒฝ์ฐ์๋ ์ฅ๋จ์ ๋ณด๋ค๋ (ํน๋ณํ ์ธ๊ธ๋๋ ์ฅ๋จ์ ์ด ์์), ํ์ ํ์ฉ ์๋ก ํ๋ก์ธ์ค ์ค์ผ์ฅด๋ง ๋ฐฉ์์ ํจ๊ป ์ดํดํด๋๋ ๊ฒ์ด ์ข์
### 4. ํ๋ก๊ทธ๋๋ฐ ์ฐ์ต
์ฐ์ต1: ๋ฆฌ์คํธ ๋ณ์๋ก ํ๋ฅผ ๋ค๋ฃจ๋ enqueue, dequeue ๊ธฐ๋ฅ ๊ตฌํํด๋ณด๊ธฐ
```
queue_list = list()
def enqueue(data):
queue_list.append(data)
def dequeue():
data = queue_list[0]
del queue_list[0]
return data
for index in range(10):
enqueue(index)
len(queue_list)
dequeue()
```
```
์ถ๋ ฅ > 10 # len(queue_list)
์ถ๋ ฅ > 2 # dequeue()
```
๐ฉโ๐ฉโ๐ฆโ๐ฆ ๋ฉค๋ฒ
๐ ์งํ ์์