문제 링크 : www.acmicpc.net/problem/10828
정답 코드
import sys
def push(x):
stack.append(x)
def pop():
if (not stack):
return -1
else:
return stack.pop()
def size():
return len(stack)
def empty():
return 0 if stack else 1
def top():
return stack[-1] if stack else -1
N = int(sys.stdin.readline().rstrip())
stack = []
for _ in range(N):
text = sys.stdin.readline().rstrip().split()
operator = text[0]
if operator == 'push':
push(text[1])
elif operator == 'pop':
print(pop())
elif operator == 'size':
print(size())
elif operator == 'empty':
print(empty())
elif operator == 'top':
print(top())
문제 풀이
해당 문제는 일반적인 스택을 구현하는 문제이다. 구현에 큰 어려움은 없지만 시간제한이 있어서 생각보다 까다로운 문제였다.
N = int(input())
stack = list()
for _ in range(N):
text = input().split()
if text[0] == 'push':
stack.append(text[1])
elif text[0] == 'pop':
if len(stack) == 0:
print(-1)
else:
print(stack[len(stack)-1])
stack.pop()
elif text[0] == 'size':
print(len(stack))
elif text[0] == 'empty':
if len(stack) == 0:
print(1)
else:
print(0)
elif text[0] == 'top':
if len(stack) == 0:
print(-1)
else:
print(stack[len(stack)-1])
제일 처음의 코드 형태이다. 시간 초과로 인하여 실패했으며, 소요시간을 줄이고 코드를 조금 더 Pythonic 하게 변경시켜서 정답 코드의 형태로 변화시켰다.
N = int(input())
text = input().split()
그럼에도 불구하고 계속 시간 초과가 발생했다.
해결법은 생각보다 간단하였다. input()로 입력을 받는 방법에서 sys를 import해서 readline()으로 바꾸었더니 제한 시간 이내에 코드가 실행되었다.
'코딩 > 백준 문제풀이' 카테고리의 다른 글
[백준 알고리즘 #4673] 셀프 넘버(Python3) (0) | 2021.03.04 |
---|---|
[백준 알고리즘 #2751] 수 정렬하기 2(Python3) (0) | 2021.03.03 |
[백준 알고리즘 #1152] 단어의 개수(Python3) (0) | 2021.03.02 |
[백준 알고리즘 #1157] 단어 공부(Python3) (0) | 2021.03.02 |
[백준 알고리즘 #1436] 영화감독 숌(Python3) (0) | 2021.03.02 |