📚
Python_Study
  • Python_Study
  • OT
    • 스터디 소개
    • 백준 설정하기
    • 질문 / 답변 / 과제 인증 방법
  • 1주차
    • 입출력과 변수, 주석
    • 제어문 1
    • 제어문 2
    • 제어문 3
    • 복습 문제
  • 2주차
    • 다양한 출력 방법
    • 문자열
    • 리스트(list)
    • 튜플(tuple)
  • 3주차
    • 다양한 함수
    • 세트(set)
    • 딕셔너리(dict)
    • 복습 문제
  • 4주차
    • 멤버 연산자
    • 아스키 코드
    • EOF
    • 복습 문제
  • 5주차
    • 진법 변환
    • 회문(팰린드롬)
    • 스택(stack)
    • 복습 문제
  • 6주차
    • 2차원 리스트
    • 정렬 심화
    • 자주 사용하는 모듈
    • 복습 문제
  • 7주차
    • 카이사르 암호
    • 순열과 조합
    • 큐(queue), 덱(deque)
    • 복습 문제
  • 8주차
    • 시계 문제
    • 얕은 복사, 깊은 복사
    • 재귀 함수 Ⅰ
    • 복습 문제
  • 9주차
    • 재귀 함수 Ⅱ
    • 그래프 알고리즘 소개
    • 플러드 필
    • 복습 문제
  • 10주차
    • 시뮬레이션Ⅰ
      • BOJ 15686 - 치킨 배달
      • BOJ 17070 - 파이프 옮기기 1
      • BOJ 21608 - 상어 초등학교
      • BOJ 11559 - Puyo Puyo
  • 11주차
    • 시뮬레이션 Ⅱ
      • BOJ 8972 - 미친 아두이노
      • BOJ 16234 - 인구 이동
      • BOJ 17135 - 캐슬 디펜스
      • BOJ 21610 - 마법사 상어와 비바라기
Powered by GitBook
On this page
  • 큐(queue)
  • 개념
  • 코드
  • 풀어볼 문제
  • 덱(deque)
  • 개념
  • 코드
  • 풀어볼 문제
  • 큐, 덱 추가 문제

Was this helpful?

  1. 7주차

큐(queue), 덱(deque)

Previous순열과 조합Next복습 문제

Last updated 4 years ago

Was this helpful?

자료구조

알고 있어야 하는 내용

자료구조의 마지막 파트인 큐, 덱 파트입니다. 알고리즘 문제에서 큐, 덱만을 이용하는 문제는 거의 없는 편이기 때문에 문제 풀이 없이 딱 3문제만 내겠습니다.

큐(queue)

개념

우리가 5주차에서 스택이란 내용을 배웠었는데요.

스택은 위 사진들과 같이 밑이 닫혀있는 상자처럼 생겨서 값을 담으면 맨 아래부터 차곡차곡 쌓고, 값을 빼야 할 때는 제일 마지막에 들어온 값인 맨 위에 있는 값을 빼내고 있습니다.

큐는 여기서 상자를 맨 아래부터 차곡차곡 쌓는 것이 스택과 똑같지만, 값을 빼낼 때는 처음에 들어온 값을 빼야 하기 때문에 스택과 다르게 아래가 뚫려있는 상자처럼 표현합니다.

그래서 첫 번째 값이 첫 번째로 나간다는 FIFO(First In, First Out) 방식을 가지고 있는 자료구조라고 합니다.

값이 들어올 때는 스택처럼 차곡차곡 쌓다가

값을 빼낼 때는 맨 아래에 있는 값을 빼내는 방식입니다.

코드

파이썬에서는 queue 모듈도 있지만, 알고리즘 문제를 풀기엔 시간이 오래 걸려서 collections.deque를 사용합니다.

from collections import deque

q = deque()

값을 넣을 때는 스택과 똑같이 q.append()를 사용하면 됩니다. 하지만 값을 뺄 때는 q.popleft()를 사용하여 첫 번째 값을 빼야 합니다.

from collections import deque

q = deque()

# 값을 넣을 때
for i in range(5):
    q.append(5-i)
    print(5-i)

# 5
# 4
# 3
# 2
# 1

# deque([5, 4, 3, 2, 1])


# 값을 뺄 때
for i in range(5):
    x = q.popleft()
    print(x)

# 5
# 4
# 3
# 2
# 1

풀어볼 문제

덱(deque)

개념

덱은 거의 쓰이지 않아서 살짝만 알려드리고 넘어가겠습니다. 덱이라는 말은 doubly-ended-queue의 약자입니다.

덱은 양쪽에서 값을 넣거나, 빼오는 자료구조 입니다.

위 사진을 보면 스택, 큐의 완벽한 상위호환 버전이라 많이 쓰일 것 같지만, 알고리즘 문제를 풀 때 양쪽으로 값을 넣고 빼는 기능이 필요한 문제가 없어서 거의 쓰이지 않는 자료구조 입니다.

코드

큐에서는 q.popleft()를 사용하였는데요. 덱에서는 popleft()뿐만 아니라 appendleft()까지 사용 가능합니다.

# append : 리스트 오른쪽에 값을 추가
# appendleft : 리스트 왼쪽에 값을 추가
# pop : 리스트 오른쪽에 있는 값을 빼냄
# popleft : 리스트 왼쪽에 있는 값을 빼냄

from collections import deque

dq = deque()

dq.append(1) # [1]
dq.append(2) # [1, 2]
dq.appendleft(3) # [3, 1, 2]
dq.appendleft(5) # [5, 3, 1, 2]

dq.pop() # [5, 3, 1]
dq.popleft() # [3, 1]
dq.popleft() # [1]
dq.popleft() # []

풀어볼 문제

큐, 덱 추가 문제

https://www.acmicpc.net/problem/10845
https://www.acmicpc.net/problem/1966
https://www.acmicpc.net/problem/10866
https://www.acmicpc.net/problem/1021
https://www.acmicpc.net/problem/5430
스택(stack)
리스트(list)
자주 사용하는 모듈(collections.deque)