[ Baekjoon : python ] 백준 10828번 스택 - 파이썬으로 스택 구현하기
![]() |
|
" 문제 "
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
" 아이디어 "

사용자 입력을 위와 같이 "push 1" 과 같은 방식으로 명령문 + 데이터 형태로 전달하기 때문에 sys.stdin.readline().split() 을 사용하여 각각 배열의 원소로 집어넣는다. (코드의 command 리스트)
command[0] 으로 명령을 구분하고 command[1]로 처리할 데이터를 받아오면 된다.
다음은 문제에 제시된 5가지 명령이다.
Python에는 따로 Switch 구문이 없으므로 각 명령의 구분은 if 문으로 해주었다.
Stack이 기본적으로 제공되지 않지만 list를 사용해서 간단하게 구현할 수 있다. (코드의 stack 리스트)
1) push X: 정수 X를 스택에 넣는 연산이다.
- append() 를 사용하여 stack 의 끝부분에 데이터를 추가한다.
stack.append(data)
2) pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- pop() 을 사용하여 스택의 마지막 데이터를 빼고 이를 print 문으로 출력한다.
print(stack.pop())
3) size: 스택에 들어있는 정수의 개수를 출력한다.
- len() 을 사용하여 스택의 길이를 출력한다.
4) empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- not 연산을 활용하여 스택이 비어있는지 여부를 확인한다.
5) top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- 마지막 데이터를 출력하기 위해 인덱스 -1의 데이터를 출력한다.
" 코드 "
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
|
import sys
input = sys.stdin.readline
n = int(input())
stack = []
for _ in range(n):
command = input().split()
if command[0] == "push":
stack.append(command[1])
elif command[0] == "pop":
if not stack:
print(-1)
else:
print(stack.pop())
elif command[0] == "size":
print(len(stack))
elif command[0] == "top":
if not stack:
print(-1)
else:
print(stack[-1])
elif command[0] == "empty":
if not stack:
print(1)
else:
print(0)
|
cs |
" 참고자료 "