문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- 1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000)
- 2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
- 3: 스택에 들어있는 정수의 개수를 출력한다.
- 4: 스택이 비어있으면 1, 아니면 0을 출력한다.
- 5: 스택에 정수가 있다면 맨 위의 정수를 출력한다. 없다면 -1을 대신 출력한다.
입력
첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000)
둘째 줄부터 N개 줄에 명령이 하나씩 주어진다.
출력을 요구하는 명령은 하나 이상 주어진다.
출력
출력을 요구하는 명령이 주어질 때마다 명령의 결과를 한 줄에 하나씩 출력한다.
예제
나의 풀이
import sys
input = sys.stdin.readline
N = int(input())
stack = []
for i in range(N):
command = input().strip()
if len(command) > 1:
stack.append(command[2:])
elif command == '2':
print(stack.pop()) if len(stack) > 0 else print(-1)
elif command == '3':
print(len(stack))
elif command == '4':
print(0) if len(stack) > 0 else print(1)
elif command == '5':
print(stack[len(stack)-1]) if len(stack) > 0 else print(-1)
- 파이썬에는 switch문이 없기 때문에 if-else문으로 각각의 명령에 따른 결과를 출력한다.
- `1`번 명령의 경우에는 입력값에서 정수 `X`를 추출해야 하기 때문에 문자열을 2번째 인덱스부터 슬라이싱했다.
- 그외의 경우에는 삼항연산자를 사용해서 값을 출력했다.
다른 사람의 풀이
import sys
input = sys.stdin.readline
N = int(input())
stack = []
for i in range(N):
command = input().strip()
if len(command) > 1:
stack.append(command[2:])
elif command == '2':
print(stack.pop()) if stack else print(-1)
elif command == '3':
print(len(stack))
elif command == '4':
print(0) if stack else print(1)
elif command == '5':
print(stack[len(stack)-1]) if stack else print(-1)
- 파이썬은 자바스크립트와 달리 리스트가 비어있지 않은 경우 `True`를 출력한다.
- 따라서 스택이 비어있는지를 확인하기 위한 조건을 `if len(stack) > 0`을 `if stack`으로 교체할 수 있다.
- 리스트의 길이를 계산하는 연산이 생략되었기 때문에 실행 시간이 약간 감소했다.