[백준] 28278번 스택 2 | 파이썬 Python

문제

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

명령은 총 다섯 가지이다.

  • 1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000)
  • 2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
  • 3: 스택에 들어있는 정수의 개수를 출력한다.
  • 4: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • 5: 스택에 정수가 있다면 맨 위의 정수를 출력한다. 없다면 -1을 대신 출력한다.

 

입력

첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000)

둘째 줄부터 N개 줄에 명령이 하나씩 주어진다.

출력을 요구하는 명령은 하나 이상 주어진다.

 

출력

출력을 요구하는 명령이 주어질 때마다 명령의 결과를 한 줄에 하나씩 출력한다.

 

예제

 

나의 풀이

import sys
input = sys.stdin.readline

N = int(input())
stack = []

for i in range(N):
    command = input().strip()
    
    if len(command) > 1:
        stack.append(command[2:])

    elif command == '2':
        print(stack.pop()) if len(stack) > 0 else print(-1)

    elif command == '3':
        print(len(stack))

    elif command == '4':
        print(0) if len(stack) > 0 else print(1)

    elif command == '5':
        print(stack[len(stack)-1]) if len(stack) > 0 else print(-1)
  • 파이썬에는 switch문이 없기 때문에 if-else문으로 각각의 명령에 따른 결과를 출력한다.
  • `1`번 명령의 경우에는 입력값에서 정수 `X`를 추출해야 하기 때문에 문자열을 2번째 인덱스부터 슬라이싱했다.
  • 그외의 경우에는 삼항연산자를 사용해서 값을 출력했다.

 

다른 사람의 풀이

import sys
input = sys.stdin.readline

N = int(input())
stack = []

for i in range(N):
    command = input().strip()
    
    if len(command) > 1:
        stack.append(command[2:])

    elif command == '2':
        print(stack.pop()) if stack else print(-1)

    elif command == '3':
        print(len(stack))

    elif command == '4':
        print(0) if stack else print(1)

    elif command == '5':
        print(stack[len(stack)-1]) if stack else print(-1)
  • 파이썬은 자바스크립트와 달리 리스트가 비어있지 않은 경우 `True`를 출력한다.
  • 따라서 스택이 비어있는지를 확인하기 위한 조건을 `if len(stack) > 0`을 `if stack`으로 교체할 수 있다.

아래 나의 풀이 / 위 다른 사람의 풀이

  • 리스트의 길이를 계산하는 연산이 생략되었기 때문에 실행 시간이 약간 감소했다.