안녕하세요! 오늘 문제는 덱 자료구조의 기본문제입니다.
오늘까지가 스택, 큐, 덱의 기본 동작들을 구현하는 기본 문제이고 다음부터는 이 자료구조들을 활용한 문제들을 풀어볼 계획입니다. (두근두근)
그럼 시작해보겠습니다.
덱
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
0.5 초 (추가 시간 없음) | 256 MB | 89812 | 49861 | 41991 | 56.147% |
정수를 저장하는 덱(Deque)를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여덟 가지이다.
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
15
push_back 1
push_front 2
front
back
size
empty
pop_front
pop_back
pop_front
size
empty
pop_back
push_front 3
empty
front
2
1
2
0
2
1
-1
0
1
-1
0
3
22
front
back
pop_front
pop_back
push_front 1
front
pop_back
push_back 2
back
pop_front
push_front 10
push_front 333
front
back
pop_back
pop_back
push_back 20
push_back 1234
front
back
pop_back
pop_back
-1
-1
-1
-1
1
1
2
2
333
10
10
333
20
1234
1234
20
저는 벨로그에 자료 구조에 관한 내용을 포스팅 중에 있습니다. 하지만 덱은 진행하지 않았는데요.
왜냐하면 덱은 이중 연결 리스트로 볼 수도있고, 스택과 큐를 합친 것으로도 볼 수 있기 때문에, 스택, 큐, 연결 리스트를 안다면 크게 어려움이 없기 때문입니다.
덱이 무엇일까요?
정의: 양쪽 끝에서 삽입과 삭제를 허용하는 자료구조입니다.
이전에 스택, 큐 기본 문제를 제가 포스팅을 했었는데요. 이 문제에서 저는 collections 모듈의 deque 클래스를 사용했었습니다. 네! 이게 바로 그 덱입니다.
deque를 양방향으로 활용하지 않으면, 스택이 될수도, 큐가 될수도 있습니다!
오늘 문제는 그 덱의 기본적인 동작들을 구현하는 문제입니다.
import sys
from collections import deque
N = int(sys.stdin.readline().strip())
deque = deque()
for _ in range(N):
command = sys.stdin.readline().split()
if command[0] == 'push_front':
deque.appendleft(int(command[1]))
elif command[0] == 'push_back':
deque.append(int(command[1]))
elif command[0] == 'pop_front':
if deque:
print(deque.popleft())
else:
print(-1)
elif command[0] == 'pop_back':
if deque:
print(deque.pop())
else:
print(-1)
elif command[0] == 'size':
print(len(deque))
elif command[0] == 'empty':
print(int(len(deque)==0))
elif command[0] == 'front':
if deque:
print(deque[0])
else:
print(-1)
elif command[0] == 'back':
if deque:
print(deque[-1])
else:
print(-1)
양방향에서 삽입 및 삭제 동작이 추가되고, 나머지는 스택, 큐와 동일한 것을 확인하실 수 있습니다.
오늘 문제는 덱 자료 구조의 기본 동작들을 구현하는 문제였습니다.
다음부터는 본격적으로 스택, 큐, 덱 자료구조를 활용하는 문제들을 풀어보겠습니다.
읽어주셔서 감사합니다.
매일 발전하는 개발자가 되기를..! ⭐