상세 컨텐츠

본문 제목

[ 알고리즘 ] 백준 10866 - 덱

CS/알고리즘

by teang1995 2022. 9. 21. 23:07

본문

반응형

문제 링크 : link

문제 티어 : 실버4

 

10866번: 덱

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

www.acmicpc.net



아이디어

딱히.. 그냥 collections.deque를 잘 사용하면 된다.

다만 저렇게 무식하게 if ~ elif를 사용하는 것만이 답일까..

뭔가 입력된 함수명으로 Deq클래스의 함수를 호출하는 법이 있을 것 같은데, -> 실제로 있기도 한데..

그렇게 짜는 게 맞는지 모르겠다.


코드

import sys
from collections import deque

class Deq:
    def __init__(self):
        self.deq = deque([])

    def push_front(self, x):
        self.deq.append(x)

    def push_back(self, x):
        self.deq.appendleft(x)

    def pop_front(self):
        if not self.deq:
            return -1
        return self.deq.pop()

    def pop_back(self):
        if not self.deq:
            return -1
        return self.deq.popleft()

    def size(self):
        return len(self.deq)

    def empty(self):
        if self.deq:
            return 0
        return 1

    def front(self):
        if not self.deq:
            return -1
        return self.deq[-1]

    def back(self):
        if not self.deq:
            return -1
        return self.deq[0]

def main():
    deq = Deq()
    N = int(input())
    for _ in range(N):
        cmds = sys.stdin.readline().strip().split(' ')
        cmd = cmds[0]
        if cmd == 'push_front':
            x = cmds[1]
            deq.push_front(x)

        elif cmd == 'push_back':
            x = cmds[1]
            deq.push_back(x)

        elif cmd == 'pop_front':
            result = deq.pop_front()
            print(result)

        elif cmd == 'pop_back':
            result = deq.pop_back()
            print(result)

        elif cmd == 'size':
            result = deq.size()
            print(result)

        elif cmd == 'empty':
            result = deq.empty()
            print(result)

        elif cmd == 'front':
            result = deq.front()
            print(result)

        elif cmd == 'back':
            result = deq.back()
            print(result)

if __name__ == '__main__':
    main()

'CS > 알고리즘' 카테고리의 다른 글

[ 알고리즘 ] 백준 1874 - 스택 수열  (1) 2022.09.22
[ 알고리즘 ] 백준 1158 - 요세푸스 문제  (1) 2022.09.21

관련글 더보기

댓글 영역