일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- jaypark.dating
- 개발자를위한파이썬
- 프로그래머스
- 쇠막대기
- 로그남기기
- 심플소프트웨어
- graphicdriver
- intell
- 신영준
- texttospeech
- 봉사활동
- 서버로그
- 타코트론
- 인하대학교
- 노트북덮개
- 2019회고
- 인하멘토링
- 서구동구예비군훈련장
- 개발자회고
- tacotron
- CrossAngle
- 한빛미디어
- 인천남중
- 결과를얻는법
- Xangle
- 우분투비트확인
- 놀이동산의슈퍼컴퓨터를작동시켜라
- machinelearning
- 나는리뷰어다
- 프로그라피
- Today
- Total
jc.jang
알고리즘 - 큐 본문
알고리즘 스터디 1주차 스택, 큐
Intro
Oct 15, 2019 장지창
안녕하세요. 프로그라피 5기 Django팀 장지창입니다.
오늘은 알고리즘 스터디 1주차에 진행한 스택, 큐에 대해 알아보겠습니다. 저희는 매주 두개의 자료구조 주제를 선정하여 관련 문제를 풉니다. 그리고 오프라인에서 개념 강의를 제공하는 방식으로 스터디가 진행되고 있습니다.
지금부터 아래에서 언급하는 내용은 제가 알고리즘 스터디를 준비하면서 스택, 큐에 대해 알아본 내용입니다. 혹시나 틀린 부분이 있거나 다른 생각이 있으시다면 댓글이나 이메일을 통해 서로 의견을 공유할 수 있으면 좋을 것 같습니다.
개념 설명
저번 글에 이어서 큐를 소개하겠습니다. 큐는 스택과 반대로 FIFO(First In First Out)순서를 따르는 선형 데이터 구조입니다.
큐의 삭제 및 삽입은 front end와 rear end에서 수행됩니다. 새로운 요소의 추가는 rear end에서 수행되고 기존 요소의 삭제는 front end에서 수행됩니다.
큐에 어떤 연산이 있는지 알아볼까요?
- enqueue: 큐에 새로운 요소를 추가합니다.
- dequeue: 큐에서 요소를 제거합니다.
- peek: 큐의 맨 위 요소를 반환합니다.
- isEmpty: 큐가 비어있는지 확인합니다.
그렇다면 큐를 어떻게 구현할까요? python tutorial 공식 문서의 리스트를 큐로 사용하기를 살펴보겠습니다.
리스트를 큐로 사용하는 것도 가능한데 리스트는 이 목적에는 효율적이지 않습니다. 리스트의 끝에 덧붙이거나, 끝에서 꺼내는 것은 빠르지만, 리스트의 맨앞에 덧붙이거나 맨앞에 꺼내는 것은 느립니다. 왜냐하면 리스트의 맨앞에 붙이거나 꺼낼 때 다른 요소들을 모두 한 칸씩 이동시켜야 하기 때문이죠.
큐를 구현하려면, 양 끝에서의 덧붙이기와 꺼내기가 모두 빠르도록 설계된 collections.deque
를 사용하는 것이 좋습니다. enqueue
와 dequeue
연산은 collections.deque에 설계된 것을 따랐고 isEmpty
와 peek
는 직접 구현했습니다.
from collections import deque
class Queue():
def __init__(self, values=list()):
self.queue = deque(values)
def enqueue(self, e):
self.queue.append(e)
def dequeue(self):
if self.queue:
self.queue.popleft()
def isEmpty(self):
if self.queue:
return False
return True
def peek(self):
if self.queue:
return self.queue[-1]
if __name__ == "__main__":
q = Queue(["이동주", "장지창", "한수민"])
q.enqueue("김건호")
q.enqueue("김은향")
q.enqueue("조예지")
q.dequeue()
q.dequeue()
q.peek()
q.dequeue()
q.dequeue()
q.peek()
관련 문제
- https://leetcode.com/problems/number-of-recent-calls/
- https://programmers.co.kr/learn/courses/30/lessons/42587
이슈 정리
스터디 때 나온 이슈들 정리해서 추가 예정
참고
'개발 > 코딩인터뷰완전분석' 카테고리의 다른 글
코딩인터뷰 완전분석 - 읽은 내용 기록 (0) | 2019.10.24 |
---|---|
코딩 인터뷰 완전 분석 - big O (0) | 2019.10.17 |
알고리즘 - 스택 (0) | 2019.10.09 |
코딩 인터뷰 완전 분석 - 행동 문제 (0) | 2019.10.02 |
코딩 인터뷰 완전 분석 - 면접 전에 (0) | 2019.10.02 |