[BOJ] 10866 덱
(class 2)
1차 코드(실패)
n=int(input())
deque=[]
for i in range(n):
cmd=input().split()
if cmd[0]=="push_front":
deque.insert(0,cmd[1])
elif cmd[0]=="push_back":
deque.append(cmd[1])
elif cmd[0]=="pop_front":
if len(deque)==0:
print(-1)
else:
print(deque.pop(0))
elif cmd[0]=="pop_back":
if len(deque)==0:
print(-1)
else:
print(deque.pop(-1))
elif cmd[0]=="size":
print(len(deque))
elif cmd[0]=="empty":
if len(deque)==0:
print(1)
else:
print(0)
elif cmd[0]=="front":
if len(deque)==0:
print(-1)
else:
print(deque[0])
elif cmd[0]=="back":
if len(deque)==0:
print(-1)
else:
print(deque[-1])
실패 이유 : 시간 초과
2차 코드(성공)
import sys
n=int(input())
deque=[]
for i in range(n):
cmd=sys.stdin.readline().split()
if cmd[0]=="push_front":
deque.insert(0,cmd[1])
elif cmd[0]=="push_back":
deque.append(cmd[1])
elif cmd[0]=="pop_front":
if len(deque)==0:
print(-1)
else:
print(deque.pop(0))
elif cmd[0]=="pop_back":
if len(deque)==0:
print(-1)
else:
print(deque.pop(-1))
elif cmd[0]=="size":
print(len(deque))
elif cmd[0]=="empty":
if len(deque)==0:
print(1)
else:
print(0)
elif cmd[0]=="front":
if len(deque)==0:
print(-1)
else:
print(deque[0])
elif cmd[0]=="back":
if len(deque)==0:
print(-1)
else:
print(deque[-1])
<코드 설명>
먼저 명령어의 개수인 n을 입력받았다. 그리고 이 n만큼 for문으로 반복시켜주었다.
for문 내에서 cmd에 명령어를 입력받도록 하였고, sys.stdin.readline().split()을 통해 입력받아주었다. 이를 이용하면 반복문으로 계속 입력값을 받는 문제에서 실행 시간을 줄일 수 있다고 한다.
cmd[0]이 push_first일 때, insert를 통해 queue 0번째에 cmd[1]값을 넣어주었다.
cmd[0]이 push_back일 때, queue에 cmd[1]값을 넣어주었다.
cmd[0]이 pop_front일 때, queue가 empty 상태일 때 (queue의 길이가 0일때) -1을 출력해주었고, 그렇지 않으면 0번째 원소를 pop해주었다.
cmd[0]이 pop_back일 때, queue가 empty 상태일 때 (queue의 길이가 0일때) -1을 출력해주었고, 그렇지 않으면 -1번째 원소를 pop해주었다.
cmd[0]이 size일 때, queue의 길이를 출력해주었다.
cmd[0]이 empty일 때, queue의 길이가 0이면 1을 출력해주고 그렇지 않으면 0을 출력해주었다.
cmd[0]이 front일 때, queue가 empty 상태일 때 (queue의 길이가 0일때) -1을 출력해주고, 그렇지 않으면 queue의 첫번째 원소인 0번째 원소를 출력해주었다.
cmd[0]이 back일 때, queue가 empty 상태일 때 (queue의 길이가 0일때) -1을 출력해주고, 그렇지 않으면 queue의 마지막 원소인 -1번째 원소를 출력해주었다.
<실행 결과>