본문 바로가기

Algorithm 문제 풀이/python

[python] 백준 10828번 스택 문제 풀이

 

https://www.acmicpc.net/problem/10828

 

10828번: 스택

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

www.acmicpc.net

 

 

문제

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

명령은 총 다섯 가지이다.

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

 

입력

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

 

출력

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

 

 

 

 

 


 

 

💻 코드

 

 

import sys

n = int(sys.stdin.readline())
stack_list = list()

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

    if "push" in command_n:
        num = int(command_n[4:])
        stack_list.append(num)

    elif "pop" in command_n:
        if len(stack_list) == 0:
            print(-1)
        else:
            print(stack_list.pop())

    elif "size" in command_n:
        print(len(stack_list))

    elif "empty" in command_n:
        if len(stack_list) == 0:
            print(1)
        else:
            print(0)

    elif "top" in command_n:
        if len(stack_list) == 0:
            print(-1)
        else:
            print(stack_list[len(stack_list) - 1])

 

 

 

 

 

📝 풀이

 

이 문제는 스택에 대한 가장 기본적인 문제였다. 하지만 주의해야 했던 점은 시간 초과가 뜬다는 점이었다. 시간 초과는 여러 줄을 입력받거나 출력할 때 입출력 방식이 느릴 경우 발생한다. 파이썬에서 이 문제는 입력 방식을 바꿔 해결할 수 있다. input 대신에 sys.stdin.readline()을 사용하고 import sys를 해주면 된다.

 

 

 

 

 

 

※ 참고하면 좋은 글

 

https://www.acmicpc.net/problem/15552

 

15552번: 빠른 A+B

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

www.acmicpc.net

 

https://www.acmicpc.net/board/view/22716

 

글 읽기 - 추가 설명 및 다른 언어 빠른 입출력 방법

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net