[Python] 백준 알고리즘 10866번 - 덱

2022. 3. 21. 22:06알고리즘/문제풀이

[Python] 백준 알고리즘 10866번 - 덱

문제 출처 : https://www.acmicpc.net/problem/10866

 

10866번: 덱

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

 접근 방식

 자료구조를 활용하여 푸는 문제이다. 파이썬에서는 'deque'라는 자료구조를 라이브러리로 지원을 한다. 

해당 자료구조에서 지원하는 메서드를 활용해서 문제를 풀면 된다. 문제의 예제를 보면 명령문이 주어져있고, 그러한 명령문 중에 'push'의 계열의 명령문만 뒤에 띄어쓰기 다음에 숫자가 같이 입력이 된다.

따라서 코드를 작성할 때 명령문을 입력받는 부분에서 명령문 부분만 따로 if문으로 판별을 하고 그 뒤에 각각에 맞춰서 코드의 명령을 작성해주면 된다.

 

deque의 경우 기존의 queue 자료구조와 다르게 앞 뒤로 자료의 입출력을 받을 수 있다. 그러므로 push, pop의 경우 front / back 구분을 잘해서 방향에 맞는 메서드를 입력해줘야 한다. 

 

 

 구현 코드

import sys
from collections import deque

num = int(sys.stdin.readline())
q = deque()

for _ in range(num):
    s = sys.stdin.readline().split()
    if s[0] == 'push_front' :
        q.appendleft(s[1])
    elif s[0] == 'push_back' :
        q.append(s[1])
    elif s[0] == 'pop_front' :
        if q : print(q.popleft())
        else : print(-1)
    elif s[0] == 'pop_back' :
        if q : print(q.pop())
        else : print(-1)
    elif s[0] == 'size':
        print(len(q))
    elif s[0] == 'empty':
        if q : print(0)
        else : print(1)
    elif s[0] == 'front':
        if q : print(q[0])
        else : print(-1)
    elif s[0] == 'back':
        if q : print(q[len(q)-1])
        else : print(-1)

 

 

 보충할 점

  • 덱, 큐, 스택 등의 자료구조 활용에 대한 연습