barcode

스택과 큐

Coding/코딩잡담

자료구조 하면서 많이 들어봤다 그죠? 그겁니다. 네.


이거 진짜 생각보다 간단하다. 아니 진짜임.

 

쉽게 말하자면 스택은 부페 접시고, 큐는 대기열이다. 회계로 치자면 스택은 후입선출법이고, 큐는 선입선출법이다. 

 

회계에서 물건 들어오고 나간 걸 기장하는 방식 중에 선입선출법, 후입선출법이 있다. 이건 뭐냐면 먼저 산 물건이 먼저 나간걸로 기장하느냐, 나중에 산 물건이 먼저 나간걸로 기장하느냐의 차이. 

 

예를 들어서 내가 어제는 카스테라 100개를 하나당 1000원에 샀고, 오늘은 카스테라 100개를 하나당 900원에 샀다. 그리고 150개를 팔았을 때 선입선출법은 어제 들여온 천원짜리 100개+오늘 들여온 900원짜리 50개가 나가고 후입선출법은 오늘 들여온 카스테라 900원짜리 100개+어제 들여온 카스테라 천원짜리 100개가 나간다. 카스테라를 개당 1200원에 팔았다 치면 18만원이고, 선입선출법일 때는 나간 카스테라에 대한 원가가 10만원+45000원 해서 14만 5천원이지만 후입선출법일 때는 9만원+5만원 해서 14만원이다.

 

부페 접시와 스택

스택은 후입선출법이라고 했는데, 부페 접시를 예로 들어보자.

 

1. 부추엄마(나임) 친구의 결혼식에 가게 된 김부추씨, 결혼식장 부페에는 각종 산해진미가 있었다. 김부추씨는 일단 초밥을 먹기 위해 접시를 들었다. -> 팝

2. 김부추씨와 같이 초밥을 먹기 위해 접시를 들려던 김배추씨, 그 때 직원이 갓 설거지+건조를 마친 따끈따끈한 접시를 들고 와 접시 더미 위에 쌓았다. -> 푸시

 

스택에서 뭘 꺼내가는 건 팝, 스택에 뭘 올리는건 푸시라고 한다. 접시 더미를 예시로 들자면 쌓여있는 접시 더미에서 맨 위에 있는 접시를 꺼내는 건 팝, 접시 더미 위에 접시를 또 올리는 건 푸시.

 

스택에는 크기가 정해져 있는데, 이것도 접시에 비유할 수 있다. 접시를 너무 높게 쌓으면 접시 더미가 무너져서 깨질 수도 있고(접시장창), 만약 사람들이 많은 부페에서 접시가 우르르 꺠진다면 안전상의 문제도 문제지만 사람들이 음식을 먹을 수 없게 된다. 만약 접시 더미가 매우 안정해서 깨지지 않는다고 가정하고 사람 키만큼 쌓는다면, 최홍만이나 야오밍같은 장신이 아닌 이상 접시 더미에서 접시를 꺼낼 수 없다. 그래서 부페에서도 접시 더미를 여러 개 두고, 갓 건조를 마친 따끈따끈한 접시를 쌓을 때도 크기가 제일 작은 접시 더미에 쌓는다. 


여담이지만 스택이 넘치는 것을 스택 오버플로우라고 한다. 예, 그 사이트 맞아요.

 

대기열과 큐

큐는 대기열을 예시로 들 수 있다.

 

1. 교양수업 과제때문에 친구와 함께 전시회에 가기로 한 화강도르마무. 오늘은 주말인데다가 하필 전시회가 또 유명한 화가의 전시회라 대기열이 엄청 길었다. -> 큐

2. 20분정도 기다리고 있으니 조금씩 줄이 줄어들고, 앞에 서 있던 사람들이 들어가는 게 보인다. -> 디큐

3. 화강도르마무와 같이 전시회를 보러 갔던 김양상추씨가 뒤를 보니, 사람들이 김양상추씨의 뒤로 줄을 서고 있었다. -> 인큐

 

수강신청이나 게임 대기열, 은행 대기열(줄을 서지는 않지만 오는 순서대로 번호표를 뽑고번호순으로 처리한다), 콘서트 대기열, 팝업스토어 대기열도 일종의 큐라고 할 수 있다. 내 뒤로 누군가 줄을 서는 것은 인큐, 내 앞에 있던 사람이 들어가는 것은 디큐.

 

 

'Coding > 코딩잡담' 카테고리의 다른 글

불 대수와 논리게이트  (0) 2022.09.26
chmod가 뭐지?  (0) 2022.09.23
이진 탐색 알고리즘  (0) 2022.09.08
시스템 소프트웨어와 응용 소프트웨어  (0) 2022.08.31
익명함수 김람다씨  (0) 2022.08.29