[백준] 10828번 - 스택

·

2 min read

💡문제 분석 요약

-- 문제 --

입력 : 1 ≤ N ≤ 10,000

  • push X: 정수 X를 스택에 넣는 연산이다.

  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

  • size: 스택에 들어있는 정수의 개수를 출력한다.

  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.

  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

💡알고리즘 설계

  1. input을 통해 N을 입력받는다.

  2. 각 명령어에 해당하는 함수를 만든다.

  3. 호출한다.

💡코드

N = input()
def check_empty(stack):
    return len(stack) == 0

def push(stack, item):
    stack.append(item)
    print("pushed item :" + item)

def pop(stack):
    if(check_empty(stack)):
        return "empty"
    return stack.pop()
stack = []
push(stack,N)

💡시간복잡도

O(1)

💡틀린 이유

  1. 접근 방식이 완전히 틀렸다.

  2. 문제의 조건을 구현하는 능력이 떨어진다.

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

import sys
x = int(sys.stdin.readline())
# 파이썬에서 스택 사용하는 방법
stack = []
# 입력 받은 값 처리
for i in range(x):
    s = sys.stdin.readline().split( )
    if s[0] =='push':
        stack.append(s[1])
    elif s[0] =='pop':
        if len(stack) > 0: print(stack.pop())
        else: print(-1)
    elif s[0] == 'size':
        print(len(stack))
    elif s[0] == 'empty':
        if len(stack) == 0: print(1)
        else: print(0)
    elif s[0] == 'top':
        if len(stack)>0: print(stack[-1])
        else: print(-1)

💡느낀점 or 기억 할 정보

  1. 처음 코테를 접하다보니 접근하는데 어려움을 느낌. -> 문제 많이 접해보기.

  2. 개념만 공부하지 말고 기본 구현한 코드 많이 접해보기.

  3. sys.stdin.readline() : 한 줄의 입력을 읽고 그 결과를 문자열로 반환한다.

  4. input() : 반복문으로 여러 줄 입력 받아야 될 때 시간 초과 가능성 존재

  5. 'split'을 통해 push 1 일 때 s[0] = push로 나눌 수 있다.