백준 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 |