https://www.acmicpc.net/problem/10828
import sys
input = sys.stdin.readline
def isEmpty(): # stack이 비어있는지 확인하는 함수
global stack, top
if top == -1:
return True
return False
n = int(input())
stack = [None] * n # stack 초기화
top = -1 # stack의 맨 위값의 index를 가리킴
for _ in range(n):
s = input().strip() # readline은 개행문자를 포함하므로, 개행문자 제거
if s[:4] == 'push':
top += 1
stack[top] = int(s[5:])
elif s == 'pop':
if isEmpty():
print(-1)
else:
data = stack[top]
stack[top] = None
top -= 1
print(data)
elif s == 'size':
if isEmpty():
print(0)
else:
print(top+1)
elif s == 'empty':
if isEmpty():
print(1)
else:
print(0)
else:
if isEmpty():
print(-1)
else:
print(stack[top])
자료구조 수업 때 배운 대로 풀었다.
쉬운데 좀 길다.
import sys
input = sys.stdin.readline
n = int(input())
stack = [None] * n
top = -1
for _ in range(n):
s = input().strip()
if s[:4] == 'push':
top += 1
stack[top] = int(s[5:])
elif s == 'pop':
if top == -1:
print(-1)
else:
data = stack[top]
stack[top] = None
top -= 1
print(data)
elif s == 'size':
if top == -1:
print(0)
else:
print(top + 1)
elif s == 'empty':
if top == -1:
print(1)
else:
print(0)
else:
if top == -1:
print(-1)
else:
print(stack[top])
풀이 1의 isEmpty()
함수를 제거하고 top == -1
로 대체하였다.
여전히 길다. .
import sys
input = sys.stdin.readline
stack = []
for _ in range(int(input())):
s = input().strip()
if s[:4] == 'push':
stack.append(int(s[5:]))
elif s == 'pop':
if len(stack) == 0: print(-1)
else: print(stack.pop())
elif s == 'size':
print(len(stack))
elif s == 'empty':
if len(stack) == 0: print(1)
else: print(0)
else:
if len(stack) == 0: print(-1)
else: print(stack[-1])
stack
을 초기화하지 않고 append()
를 사용해 push를 하였다.
또한 pop()
함수를 사용해 코드가 간결해졌다.
풀이 2와 속도 차이가 꽤 날 거라고 생각했는데, 그다지 많이 차이 나지 않았다.