https://www.acmicpc.net/problem/10828
import sys
N = int(sys.stdin.readline())
stack = [] # 정수 저장 스택
for _ in range(N):
command = sys.stdin.readline().strip()
if command[0:4] == "push":
stack.append(command[5:])
elif command == "pop":
if stack:
print(stack.pop())
else:
print(-1)
elif command == "size":
print(len(stack))
elif command == "empty":
if stack:
print(0)
else:
print(1)
elif command == "top":
if stack:
print(stack[-1])
else:
print(-1)
1)
처음에는 command를 str로 받아서 슬라이싱을 통해 명령어(push, pop 등)를 구분하려고 했다. 풀면서도 명령어의 길이가 다 다르고 push 같은 명령어는 원소도 같이 입력을 받기 때문에 애매한 구현이라고 생각을 하긴 했다.
다른 사람의 풀이를 찾아보고 아래와 같이 코드를 변경했다.
split() 메서드를 이용하면 command를 리스트로 받을 수 있고, 이때 모든 명령어에 대해 commad[0]는 그 명령어의 풀 네임이 된다. 좀 더 직관적인 코드라고 생각한다.
2)
스택이 비어있는 조건을
if stack:
# statement
와 같이 구분했는데,
if len(stack) == 0:
# statement
로 구현한 사람들이 더 많았다.
어쨌든 수정한 최종 코드는 다음과 같다.
import sys
N = int(sys.stdin.readline())
stack = [] # 정수 저장 스택
for _ in range(N):
command = sys.stdin.readline().split()
if command[0] == "push":
stack.append(command[1])
elif command[0] == "pop":
if len(stack) == 0:
print(-1)
else:
print(stack.pop())
elif command[0] == "size":
print(len(stack))
elif command[0] == "empty":
if len(stack) == 0:
print(1)
else:
print(0)
elif command[0] == "top":
if len(stack) == 0:
print(-1)
else:
print(stack[-1])