개발(코딩)/백준 문제풀이

[Python] 백준 28278번 스택 2(실버4)

아는 개 산책 2025. 3. 31. 21:23

문제

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

명령은 총 다섯 가지이다.

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

입력

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

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

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

출력

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

예제 입력 1

9
4
1 3
1 5
3
2
5
2
2
5

예제 출력 1

1
2
5
3
3
-1
-1

풀이

숫자를 List에 저장하고, Stack 처럼 이용해 봅시다.

더보기

Point

  • List
  • Stack

소스코드

import sys
def input():
    return sys.stdin.readline().strip()

stack = []

for _ in range(int(input())):
    k = input()
    if len(k) != 1:
        _ , x = map(int,k.split())
        stack.append(x)
    else:
        if k == '2':
            if len(stack) == 0:
                print(-1)
            else:
                print(stack.pop())
        elif k == '3':
            print(len(stack))
        elif k == '4':
            print(int(len(stack) == 0))
        elif k == '5':
            if len(stack) == 0:
                print(-1)
            else:
                print(stack[-1])

 

stack이라는 list를 만들고 이를 stack으로 활용합니다.

stack은 'First in Last out' 규칙을 따르기 때문에,

stack에서 항목을 뺄 때, 맨 마지막에 집어 넣은 항목을 빼냅니다.

Line 1~3

import sys
def input():
    return sys.stdin.readline().strip()

 

많은 문자열을 짧은 시간내로 받기 위해 input()함수를 sys.stdin.readline().strip()으로 대체합니다.

Line 5~26

stack = []

for _ in range(int(input())):
    k = input()
    if len(k) != 1:
        _ , x = map(int,k.split())
        stack.append(x)
    else:
        if k == '2':
            if len(stack) == 0:
                print(-1)
            else:
                print(stack.pop())
        elif k == '3':
            print(len(stack))
        elif k == '4':
            print(int(len(stack) == 0))
        elif k == '5':
            if len(stack) == 0:
                print(-1)
            else:
                print(stack[-1])

 

input에 따라 경우를 나누어 줍니다.

input (= k) 에 들어오는 정수의 갯수가 2개인 경우부터 구분하기 위해,

 

1.

k의 길이가 1이 아니라면, (문제 상황의 1번 상황 : k = '1 X' )

k를 둘로 나누어 두번째 x 값을 stack에 추가해 줍니다.

 

2.

k 가 '2'라면, stack이 비어있으면 -1 을 출력, 아니라면 stack의 마지막 항목을 pop하고(뽑아내고) 출력합니다.

 

3.

k 가 '3'이라면, stack의 길이를 출력합니다.

 

4.

k 가 '4'라면, stack의 길이가 0인지 아닌지 (True / False) 를 정수로 변환해 ( 1 / 0 ) 을 출력합니다.

 

5.

k 가 '5'라면, stack이 비어있으면 -1 을 출력, 아니라면 stack의 마지막 항목을 stack[-1]을 출력합니다.