백준-10828 스택

타마타마·2024년 8월 19일
0

문제정리노트

목록 보기
1/5

💡문제 분석 요약

  • 값 입력 받은 후 stack 구현
  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

(시간/공간복잡도 제약도 추가하면 좋을것 같아요!)

💡알고리즘 설계

  • 몇개를 조절할지 정수 입력받기
  • push일 경우 스택에 넣을 단어 + 띄어쓰기 + 숫자
  • push 때 띄어쓰기로 구분을 짓기 때문에 리스트로 split하여 사용
  • 명령어 입력 후 바로 출력문 나오도록 설정

💡코드


import sys
num = int(sys.stdin.readline())

stack = []
for i in  range(num):
    type = sys.stdin.readline().split()
    if type[0] == "push":
       stack.append(type[1])
    elif type[0] == "pop":
        if len(stack) > 0: 
            print(stack.pop()) 
        else: print(-1)
    elif type[0] == "size":
        print(len(stack))
    elif type[0] == "empty":
        if len(stack) > 0: print(0)
        else: print(1)
    elif type[0] == "top": 
        if len(stack) > 0: print(stack[-1])
        else: print(-1)  

💡시간복잡도

O(1)

💡 틀린 이유

  • 시간 초과

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

  1. int(input())로 사용했더니 시간초과 발생.
  2. import sys
    input = int(sys.stdin.readline())
    을 설정한 뒤, num = int(input())했는데 오류 발생
  3. int(input().strip()) 을 사용해볼까? >> 안됨
  4. python에서 input이라는 라이브러리가 있어서 라이브러리 변수 명을 설정하면 안되는건가 ? 생각
  5. input변수를 num으로 변경하여 성공

💡 느낀점 or 기억할정보

느낀점

항상 혼자 코딩테스트 준비를 하고, 여러 문제들을 풀었는데 나는 역시 강제성이 조금이라도 들어가 있어야 하는 것 같다..
솔직히 오답노트를 작성하기 전까지만 해도 그냥 머리나 주석으로 남기는 것도 괜찮지 않나? 왜 굳이 오답노트를 할 까.. 생각을 했는데 막상 따로 남겨보니 왜 해야하는지 알 것 같다.
머리속 or 주석으로 간단하게 남기는 것도 좋겠지만, 글로 내가 어떻게 생각했고 어떻게 다시 생각했는지를 정리하니 더 확실하게 와닿는 것 같다.
역시 사람들이 하는 거에는 이유가 있다는걸 다시 한 번 느낀다..

귀찮음이 몰려와도 해야지 ..

기억할 정보

찾아보니 input()이 내부에서 처리하는 작업이 많아서 시간이 오래걸린다고 나와있다. 단순히 콘솔에서 입력받을 땐 괜찮겠지만 남용하는 것을 지양해야할 것 같다.
대신 sys.stdin.readline() 해당 라이브러리를 사용해야지
(근데 왜 strip()은 안된거지 ?)

0개의 댓글