[백준] 10866번: 덱

Chaejung·2022년 7월 29일
0

알고리즘_Python

목록 보기
12/22
post-thumbnail

문제

백준 10866번

풀이 I_class를 이용

32508 KB 224 ms

class 할당하는 데에 시간을 대체로 잡아먹는다, ex. total=2.9, allocation=2.4
문자열을 그대로 실행시켜주는 exec()가 핵심 참고

from collections import deque
import sys
input = sys.stdin.readline

order_num = int(input())

class Deq:
    
    def __init__(self):
        self.deque01 = deque()
    
    def push_front(self, number):
        self.deque01.appendleft(number)

    def push_back(self, number):
        self.deque01.append(number)

    def isEmpty(self):
        if len(self.deque01) == 0:
            return 1
        else: return 0

    def empty(self):
        if self.isEmpty() == 1:
            print(1)
        else:
            print(0)

    def size(self):
        print(len(self.deque01))
    
    def pop_front(self):
        if self.isEmpty() == 1:
            print(-1)
        else:
            print(self.deque01.popleft())
    
    def pop_back(self):
        if self.isEmpty() == 1:
            print(-1)
        else:
            print(self.deque01.pop())
    
    def front(self):
        if self.isEmpty() == 1:
            print(-1)
        else:
            print(self.deque01[0])
    
    def back(self):
        if self.isEmpty() == 1:
            print(-1)
        else:
            print(self.deque01[-1])

dequeAnswer = Deq()

for _ in range(order_num):
    order = input().strip()
    if order[:4] == 'push':
        order_op, number = order.split()
        execute = 'dequeAnswer.{0}({1})' .format(order_op, number)
        exec(execute)
    else:
        order_op = order
        execute = 'dequeAnswer.{0}()' .format(order_op)
        exec(execute)

풀이 II_조건문을 이용

32452 KB 96 ms

⭐️⭐️⭐️readline을 쓰지 않으면 시간 초과가 납니다 매우 중요⭐️⭐️⭐️

from collections import deque

import sys
input = sys.stdin.readline

order_num = int(input())

deque01 = deque()

for _ in range(order_num):
    order = input().strip()
    if order[:4] == 'push':
        order_op, number = order.split()
    else:
        order_op = order
    if order_op == 'push_back':
        deque01.append(number)
    elif order_op == 'push_front':
        deque01.appendleft(number)
    elif order_op == 'pop_front':
        print(deque01.popleft()) if deque01 else print(-1)
    elif order_op == 'pop_back':
        print(deque01.pop()) if deque01 else print(-1)
    elif order_op == 'size':
        print(len(deque01))
    elif order_op == 'empty':
        print(0) if deque01 else print(1)
    elif order_op == 'front':
        print(deque01[0]) if deque01 else print(-1)
    else:
        print(deque01[-1]) if deque01 else print(-1)

profile
프론트엔드 기술 학습 및 공유를 활발하게 하기 위해 노력합니다.

0개의 댓글