백준_10828 Stack 구현

jiyseo·2024년 5월 7일

코딩테스트

목록 보기
2/9

💡문제 분석 요약

stack을 명령어에 따라 처리하도록 구현하는 문제

https://www.acmicpc.net/problem/10828

💡알고리즘 설계

stack을 클래스로 구현하지 않고 반복문을 통해 명령어 처리

💡코드

import sys

def stack_sim(n) :
    stack = []
    for i in range(n) :
        order = sys.stdin.readline().split()
        if order[0] == "empty" :
            if len(stack) == 0 : print(1)
            else : print(0)
        elif order[0] == "push" :
            stack.append(int(order[1]))
        elif order[0] == "pop" :
            if len(stack) == 0 : print(-1)
            else : print(stack.pop())
        elif order[0] == "size" :
            print(len(stack))
        elif order[0] == "top" :
            if len(stack) == 0 :
                print(-1)
            else : print(stack[-1])
    
stack_sim(int(sys.stdin.readline()))

💡시간복잡도

n개의 입력값에 대해 처리하기 때문에 O(n)

💡 틀린 이유

  • push 입력 시 “push 1”로 들어오는 것을 split 처리 안함
  • 시간초과
  • 런타임에러 (IndexError)

💡 틀린 부분 수정 or 다른 풀이

  • 입력을 구현한 input()함수에 의해 시간초과가 발생했다. 입출력 속도가 더 짧은 sys.stdin.readline()를 이용해 해결했다
    • 입출력 속도 비교 : sys.stdin.readline() > raw_input() > input()
  • Class를 이용해 구현했으나 메모리가 너무 많이 사용되어 수정함 → 근데 메모리가 줄지 않음 어케 줄이는거지 (python으로는 이게 최대인듯하다)
  • stack이 비어있을 때 top을 입력하면 -1을 출력해야하는데 class를 쓰지않도록 수정하는 과정에서 까먹어서 런타임에러 발생

💡 느낀점 or 기억할정보

  • input() 함수보다 sys.stdin.readline()를 사용해야 시간 단축
  • 문제를 꼼꼼히 읽어서 요구사항을 다 맞출 수 있도록 하자

0개의 댓글