코딩하면솔솔잠옴

[백준 10828] 스택 파이썬(Python) 본문

Programming/Baekjoon

[백준 10828] 스택 파이썬(Python)

솔s 2023. 2. 8. 22:41
반응형
SMALL

[ 문제 ]

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

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

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

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

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

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

입력

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

출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

예제입력

14

push 1

push 2

top

size

empty

pop

pop

pop

size

empty

pop

push 3

empty

top

예제출력

2

2

0

2

1

-1

0

1

-1

0

3

 


소스코드
import sys

n = int(sys.stdin.readline())
list = []

for i in range(n):
    list2 = sys.stdin.readline().split()

    if(list2[0] == "push"):
        list.insert(0, list2[1])
        
    if(list2[0] == "pop"):
        if(len(list) == 0): print(-1)
        else: print(list.pop(0))
            
    if(list2[0] == "size"):
        print(len(list))
        
    if(list2[0] == "empty"):
        if(len(list) == 0): print(1)
        else: print(0)
        
    if(list2[0] == "top"):
        if(len(list) == 0): print(-1)
        else: print(list[0])

문제를 따라 코드를 짰을 때 시간 초과가 떴다.

이것을 해결하기 위해선 sys 모듈을 사용하면 된다.

input()과 sys.stdin.readline()의 차이는 무엇일까?

input()은 문자를 화면에 출력하여 사용자 입력을 기다리고 입력한 값이 하나씩 버퍼에 들어가며, 줄 바꿈을 제거하여 값을 반환해 준다.

sys.stdin.readline()은 화면에 출력하지 않고 한 번에 값을 읽어와 버퍼에 저장한다.

해당 차이로 인해 input()보다 sys.stdin.readline()이 빠르게 입력받으며 시간 초과를 해결할 수 있다.

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

반응형
LIST

'Programming > Baekjoon' 카테고리의 다른 글

[백준 11047] 동전 0 (Python)  (0) 2023.02.11
[백준 2164] 카드2 (Python)  (0) 2023.02.08
Comments