[백준] #10828 스택(python)

수영·2022년 7월 13일

백준

목록 보기
1/117
post-thumbnail

📌문제

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

명령은 총 다섯 가지이다.

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

입력

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

출력

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

💻코드

import sys

num = int(sys.stdin.readline().strip())
stack = []

for i in range(0, num):
    op = sys.stdin.readline().split()
    if op[0] == "push":
        stack.append(op[1])
    elif op[0] == "pop":
        print(stack.pop() if len(stack) > 0 else -1)
    elif op[0] == "size":
        print(len(stack))
    elif op[0] == "empty":
        print(1 if len(stack) == 0 else 0)
    elif op[0] == "top":
        print(stack[len(stack) - 1] if len(stack) > 0 else -1)

💡Idea

파이썬에서 스택은 리스트로 표현할 수 있습니다. 스택의 LIFO(Last In First Out)방식을 구현할 수 있는 appendpop과 같은 리스트 연산자들이 존재하기 때문에 이것들을 활용해서 쉽게 구현할 수 있을 것으로 생각했습니다.

📝코드 설명

스택을 표현할 리스트를 하나 만들어준 뒤, 입력을 하나씩 받으면서 if-elif 문으로 입력에 따른 처리를 해주었습니다.

변수

  • stack : 스택을 표현하는 리스트
  • num : 명령어의 수
  • op : 하나씩 입력되는 명령어를 담은 변수로, push는 길이 2의 리스트, push를 제외한 모든 명령어는 길이 1의 리스트로 표현된다.
    push의 경우 op[1]에 추가하고자 하는 값이 들어있다.

popempty, top 부분에 python식 삼항연산자를 사용된 것을 확인할 수 있습니다. 스택이 비어있는지 아닌지를 확인한 뒤 그에 맞는 출력을 보여주기 위함입니다.

삼항연산자는 condition ? A : B에서 조건에 만족하면 A, 만족하지 않으면 B를 선택하는 연산자입니다. 일반 if-else문과 혹시 다른 것이 있나 찾아봤는데, 그냥 if-else문을 한 줄로 표현한 것이나 다름없다고 합니다.



마치며

예전 자료구조 공부할 때가 생각이 나는 문제였다. 간단한 문제지만 백준을 풀면서 이렇게 기초부터 잘 다져가면 좋을 것 같다는 생각이 들었다. 또 예전의 덕지덕지 코드가 아니라 효율적이고 알아보기 쉬운 코드로의 연습을 많이 해보면 좋을 것 같다는 생각을 했다!😎

profile
하고 싶은 건 그냥 죽도록 합니다

0개의 댓글