문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
예제 입력 1
14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top
예제 출력 1
2
2
0
2
1
-1
0
1
-1
0
3
예제 입력 2
7
pop
top
push 123
top
pop
top
pop
예제 출력 2
-1
-1
123
123
-1
-1
나의 풀이
if __name__ == '__main__':
N = int(input())
Stack = []
commanArr = []
for _ in range(N):
M = input().split()
commanArr.append(M)
for M in commanArr:
command = M[0]
if M[0] == 'push':
Stack.append(M[1])
continue
elif M[0] == 'top':
if len(Stack) == 0:
print(-1)
continue
else:
print(Stack[-1])
continue
elif M[0] == 'size':
print(len(Stack))
continue
elif M[0] == 'pop':
if len(Stack) == 0:
print(-1)
continue
else:
T = Stack.pop()
print(T)
continue
elif M[0] == 'empty':
if len(Stack) == 0:
print(1)
continue
else:
print(0)
continue
사실 이 문제는 스택의 개념에 대해서 정확하게 알고 있다면 어려운 문제가 아니었습니다
문제는... 내가 알고 있는 대로 구현을 했음에도 시간초과가 발생하는 것이었습니다
순회하면서 if 조건문이 많이 들어가기 때문에 시간 초과가 발생하는 것이 아닐까 하는 생각을 했습니다. 그래서 Switch구문이 없을까 하는 궁금증이 생겼고...
결론적으로 말씀드리자면 Python에는 기본적으로 Switch문이 존재하지 않습니다
커뮤니티에서 추가 기능구현에 대한 투표들을 진행했었는데 Switch구문에 대해서는 인기가 없었습니다
if~elif 구문 Or Dictionary를 활용하면 해결할 수 있는데 굳이 있어야 하냐?는 의견들도 있었다고 합니다
저는 if~elif를 썼음에도 시간초과가 발생하고 있었기에 이를 해소하기 위해서 for 문을 돌때 해당하는 부분에서 연산을 해결했다면 그 아래의 코드를 훑을 필요가 없으므로 Continue로 다음 iter로 보내는 방법으로 해결했습니다
'알고리즘 > 문제풀이' 카테고리의 다른 글
백준 11866번 요세푸스0 문제 - Python (0) | 2023.02.19 |
---|---|
백준 11650번 좌표 정렬하기 - Python (0) | 2023.02.19 |
백준 4153번 직각삼각형 - Python (0) | 2023.02.17 |
백준 2231번 분해합 - Python (0) | 2023.02.17 |
백준 1929번 소수 구하기 - Python (0) | 2023.02.16 |