728x90
반응형
문제 요약
정수를 저장하는 스택을 구현한 후, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하라
- push X: 정수 X를 스택에 넣는 연산
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력.
- size: 스택에 들어있는 정수의 개수 출력
- empty: 스택이 비어있으면 1, 아니면 0 출력
- top: 스택의 가장 위에 있는 정수 출력. 만약 스택에 들어있는 정수가 없는 경우에는 -1 출력.
입력
첫 번째 줄에 명령의 수 N (1 <= N <= 10,000) 입력
둘째 줄부터 N개의 줄까지 명령 하나씩 입력
주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같음
문제에 나와있지 않은 명령이 주어지는 경우 X
출력
출력해야 하는 명령 주어질 때마다, 한 줄에 하나씩 출력
입출력 예시
입력 | 출력 |
14 push 1 push 2 top size empty pop pop pop size empty pop push 3 empty top |
2 2 0 2 1 -1 0 1 -1 0 3 |
7 pop top push 123 top pop top pop |
-1 -1 123 123 -1 -1 |
코드
import sys
class Stack:
def __init__(self):
self.stack = []
def push(self, data):
self.stack.append(data)
def pop(self):
if self.empty():
return -1
else:
return self.stack.pop()
def size(self):
return len(self.stack)
def empty(self):
if len(self.stack) == 0:
return 1
else:
return 0
def top(self):
if self.empty():
return -1
else:
return self.stack[-1]
N = int(input())
S = []
stack = Stack()
result = 0
for _ in range(N):
S.append(sys.stdin.readline().rsplit())
for i in range(N):
if S[i][0] == "push":
stack.push(S[i][1])
continue
elif S[i][0] == "pop":
result = stack.pop()
elif S[i][0] == "size":
result = stack.size()
elif S[i][0] == "empty":
result = stack.empty()
elif S[i][0] == "top":
result = stack.top()
print(result)
피드백
스택을 어떻게 구현할지 몰라서 스택에 대해 공부하는데 시간이 걸렸다.
class로 구현하는 것을 배워서 배운대로 써먹어봤다.
다른 사람들은 class로 구현하지 않고 직접 명령어를 사용해서 더 빠르게 동작하는 것 같다.
깨달은 것
- input()으로는 시간 초과되어 sys.stdin.readline() 사용
- class로 구현하지 않으면 더 빠름
728x90
반응형
'알고리즘' 카테고리의 다른 글
[자료구조:스택] 백준 12605번 단어 순서 뒤집기 (0) | 2021.03.03 |
---|---|
[자료구조:스택] 백준 10773번 제로 (0) | 2021.03.01 |
[구현] 백준 1100번 하얀 칸 Python 풀이 (0) | 2021.02.25 |
[그리디] 백준 1439번 뒤집기 Python 풀이 (0) | 2021.02.24 |
[구현] 백준 1009번 분산처리 Python 풀이 (0) | 2021.02.20 |