우선 간단히 스택 구조에 대해서 정리해보자면, 스택(stack)은 LIFO(Last In First Out) 구조이다. 즉, 가장 최근에 스택에 추가한 항목이 가장 먼저 나오는 항목이 된다.

이미지 출처: https://www.programiz.com/dsa/stack

 

아마 C/C++로 했으면 코드가 길어지고 조금은 어려웠을지도 모르겠다고 느껴지겠지만,

확실히 파이썬으로 하니 간단하게 처리할 수 있었다.

파이썬에서는 C++처럼 스택에 대한 STL은 없지만, list의 append, pop 메서드를 활용하여 간단하게 처리할 수 있다.

 

자세한 부분은 https://docs.python.org/ko/3/tutorial/datastructures.html를 참고하면 된다.

 

5. 자료 구조 — Python 3.9.6 문서

5. 자료 구조 이 장에서는 여러분이 이미 배운 것들을 좀 더 자세히 설명하고, 몇 가지 새로운 것들을 덧붙입니다. 5.1. 리스트 더 보기 리스트 자료 형은 몇 가지 메서드들을 더 갖고 있습니다. 이

docs.python.org


대신 백준에서 파이썬 코드를 제출할 때, input()을 활용하면 시간 초과가 뜬다. 

다라서, sys.stdin.readline()을 사용해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys
num = int(sys.stdin.readline())
stack = []
= 0
for i in range(num):
    stack_word = sys.stdin.readline()
    if stack_word[:4== "push":
        stack.append(int(stack_word[5:]))
    if stack_word[:3== "pop":
        if len(stack) != 0:
            print(stack.pop())
        else:
            print(len(stack) - 1)
    elif stack_word[:4== "size":
        print(len(stack))
    elif stack_word[:5== "empty":
        if len(stack) == 0:
            print(1)
        else:
            print(0)
    elif stack_word[:3== "top":
        if len(stack) == 0:
            print(-1)
        else:
            print(stack[-1])
    else:
        pass
    i += 1
 
cs

 

 

문제 출처: https://www.acmicpc.net/problem/10828

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

+ Recent posts