백준 알고리즘 10828 (Python)

김용녀·2022년 9월 18일
0

알고리즘

목록 보기
1/3

import sys
input=sys.stdin.readline
n = int(input())
list1 = []
for i in range(n):
  m = input().split()
  if m[0]=='push':
    list1.append(m[1])
  elif m[0] == 'top':
    if not list1:
       print(-1)
    else:
      print(list1[-1])
  elif m[0] == 'pop':
     if not list1:
       print(-1)
     else:
       print(list1[-1])
       list1.pop()
  elif m[0] == 'size':
    print(len(list1))
  elif m[0] == 'empty':
    if list1:
      print(0)
    else :
      print(1)

내 초기 코드다.

계속 시간초과가 뜬다.(처음 런타임에러는 걍 틀린 코드..)
처음에는 내가 시간복잡도 신경 안쓰고 풀었나 생각해서 고민을 해보았으나
아무리 생각해도 주어진 N의 범위와 for문 하나와 if문 분기로 이뤄진 코드에서 시간초과가 될만한것이 없다고 생각해서 검색하기로했다..

해결방법은 input()은 줄바꿈까지 입력받아서 시간초과 문제가 일어날수있다는것이다.
이전에 input() 대신 sys.stdin.readline 으로 입력받아야 시간복잡도가 유리하다는것을 본적은 있으나 그냥 넘어갔다는것이 실수였다.

import sys

input=sys.stdin.readline

해당 코드만 추가하면 input의 시간복잡도 문제를 해결해줘서 시간초과 문제를 해결할수 있다.


이후에 다른 문제에서 sys.stdin.readline을 적용해서 비교해봤다.

문자열을 연속으로 입력받는경우 반드시 써야겠다..

참고 자료 - https://www.acmicpc.net/board/view/44990

profile
어서오세요

0개의 댓글