[ Baekjoon : python ] 백준 10866 덱 Deck - 파이썬으로 덱 구현하기
![]() |
|
" 문제 "
10866번: 덱
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
" 아이디어 "
기본적인 아이디어는 10828 스택 문제와 비슷하다.
2021/01/03 - [알고리즘/Beakjoon] - [ Baekjoon : python ] 백준 10828번 스택 - 파이썬으로 스택 구현하기
[ Baekjoon : python ] 백준 10828번 스택 - 파이썬으로 스택 구현하기
[ BAEKJOON ONLINE JUDGE ] 10828 스택 _ Python 파이썬 " 문제 " www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명..
codingexplore.tistory.com
스택 (Stack) 과 유사하게 덱 (Deck) 도 list로 구현했다.
다만 스택과는 달리 데이터 삽입과 삭제가 양쪽에서 일어난다는 차이가 있다.
push 와 pop 명령이 모두 front 와 back으로 나뉘는 것을 알 수 있다.
list의 어느쪽을 front로 할 지는 관계없으나 이 코드에서는 deck[0] 을 front 로 간주하고 작성하였다.
한 가지 주의할 점은 pop() 의 경우 list의 마지막 인덱스의 데이터를 꺼내오기 때문에
pop_front 명령에서는 다음과 같이 pop 함수의 인자로 0을 넣어서 front 데이터를 꺼내도록 한다.
deck.pop(0)
나머지 명령은 스택 문제와 유사하다.
" 코드 "
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import sys
input = sys.stdin.readline
n = int(input())
deck = []
for _ in range(n):
command = input().split()
if command[0] == "push_front":
deck.insert(0, command[1])
elif command[0] == "push_back":
deck.append(command[1])
elif command[0] == "pop_front":
if not deck:
print(-1)
else:
print(deck.pop(0))
elif command[0] == "pop_back":
if not deck:
print(-1)
else:
print(deck.pop())
elif command[0] == "size":
print(len(deck))
elif command[0] == "front":
if not deck:
print(-1)
else:
print(deck[0])
elif command[0] == "back":
if not deck:
print(-1)
else:
print(deck[-1])
elif command[0] == "empty":
if not deck:
print(1)
else:
print(0)
|
cs |
" 참고자료 "