본문 바로가기
  • The future is ours
코딩(파이썬)_백준

백준 알고리즘 10828번 스택(파이썬,Python)

by scarlet bloom flowers once more 2022. 3. 21.
반응형

이 문제는 스택구조에 대해 이해를 하고 있는지를 확인하는 단순한 문제이다. 스택에 대한 이해만 하고 있으면 쉽게 해결할 수 있다.

우선 간략하게 설명하자면, 스택은 한쪽이 막혀있는 통이라고 생각하면 쉽다. 프링글스 통을 생각해보자. 우리가 10개의 각각 다른 물건을 넣었다면, 빼낼때는 그 역순으로, 가장 최근에 넣은 물건부터 빼낼 수 있다. 스택이 그런것이다.

이제 문제를 풀어보자. 문제에서는 push, pop, size, empty, top 이렇게 다섯가지 명령을 제시했다.

///

import sys
num=int(input())
st=[]
for i in range(num):
    word=sys.stdin.readline().split()
    ch=word[0]

    if ch=='push':
        n=word[1]
        st.append(n)
    elif ch=='pop':
        if len(st) !=0:
            print(st.pop())
        else:
            print(-1)
    elif ch=='size':
        print(len(st))
    elif ch=='empty':
        if len(st)==0:
            print(1)
        else:
            print(0)
    elif ch=='top':
        if len(st) !=0:
            print(st[-1])
        else:print(-1)

///

이것이 내 풀이다. 하나씩 설명을 하겠다.

sys를 사용해 sys.stdin.readline()을 한 이유는 런타임을 줄이기 위해서이며 (input()을 이용한다면 이 곳에서 런타임에러가 뜬다) 

st라는 빈 리스트를 만들어줬다.

이제 st라는 프링글스통을 채워줄 녀석들을 만나보자.

word에서 처음으로 제시되는 녀석을 뽑아와줄, ch=word[0]를 도입하여, 이 녀석으로 push를 할지, pop을 할지, size를 할지, empty를 할지, top을 할지 결정한다. 

push의 경우, 우리가 넣을 숫자가 push뒤에 붙어있기에 그것을 불러오기 위해 n=word[1]를 사용해 숫자를 리스트에 집어넣는다. 

pop에서는 리스트의 길이를 판별해 어떤 수를 출력할지 결정해주고, size에서는 리스트에 들어있는 정수의 개수를 출력해준다. empty에서는 스택이 비어있는지, 아닌지에 따라 각각 1과 0을 출력해주며 top에서는 리스트의 가장 위. 즉 프링글스 통의 가장 위에 있는, 가장 최근에 넣은 수를 출력한다. 만약 이가 없을시 -1을 출력하도록 한다.

큐와 덱 등 유사한 개념들이 많아 헷갈리기 쉽지만, 확실히 숙지만 해놓는다면 쓸 곳이 많은 유용한 친구이니 잘 외워두도록 하자.

반응형