백준 28279번 : 덱2

2024. 6. 5. 20:44개인활동/코테

https://www.acmicpc.net/problem/28279

n = int(input())
deque = []

for _ in range(n):
    cmd = list(input().split())

    if cmd[0] == '1': deque.insert(0, cmd[1])
    elif cmd[0] == '2': deque.append(cmd[1])
    elif cmd[0] == '3':
        if deque: print(deque[0]); del deque[0]
        else: print(-1)
    elif cmd[0] == '4':
        if deque: print(deque[-1]); del deque[-1]
        else: print(-1)
    elif cmd[0] == '5': print(len(deque))
    elif cmd[0] == '6':
        if deque: print(0)
        else: print(1)
    elif cmd[0] == '7':
        if deque: print(deque[0])
        else: print(-1)
    else:
        if deque: print(deque[-1])
        else: print(-1)

첫 시도에 스택때처럼 시간초과가 떴다.

pop 과정에서 훑고 뽑아내고 인덱스를 재정렬하는 과정으로 인하여 시간이 오래 걸린다고 한다.

 

그래서 스택때처럼 코드를 수정해보았다.

import sys
from collections import deque

deque = deque()
n = int(sys.stdin.readline())

commands = {
    "1" : lambda x: deque.appendleft(x),
    "2" : lambda x: deque.append(x),
    "3" : lambda: print(deque.popleft() if deque else -1),
    "4" : lambda: print(deque.pop() if deque else -1),
    "5" : lambda: print(len(deque)),
    "6" : lambda: print(0 if deque else 1),
    "7" : lambda: print(deque[0] if deque else -1),
    "8" : lambda: print(deque[-1] if deque else -1)
}

for _ in range(n):
    cmd = sys.stdin.readline().split()
    if (cmd[0] == "1") | (cmd[0] == "2"):
    	commands[cmd[0]](cmd[1])
    else:
    	commands[cmd[0]]()

 

이 때 주의할점!! sys.stdin.readline().split()을 하는 경우 문자열로 받아오기에 명령어 역할을 하는 숫자들을 모두 str처리를 해주어야 한다.

 

이렇게 문제 또 해결~

 

 

'개인활동 > 코테' 카테고리의 다른 글

백준 24511번 : queuestack  (0) 2024.06.07
백준 2346번 : 풍선 터트리기  (0) 2024.06.07
백준 11866번 : 요세푸스 문제 0  (0) 2024.06.04
[프로그래머스] 하샤드 수  (1) 2024.06.03
[프로그래머스] 평균 구하기  (0) 2024.06.01