낼름낼름 동동이

[백준 28278] 스택 2 본문

코딩/Backjun

[백준 28278] 스택 2

인죠인간 2024. 3. 29. 10:42

 

문제 해석

  1. 명령의 종류별로 반복해서 일어나므로 함수로 지정해서 기능을 만들어야겠다고 생각했다.
  2. 명령을 코드화 해보면
    1. 1번 명령은 stack에 append를 해주는 것
    2. 2번 명령은 stack이 0이 아닐 때 pop()을 하는 것
    3. 3번 명령은 stack에 들어간 원소 개수 출력
    4. 4번은 비어있는지 조건 체크해서 1, 0 출력
    5. 5번은 pop하지 않고 다음에 출력될 stack[-1]을 출력하는 것이다

에러 처리

1. order_list에 반복해서 입력을 받을 때, input()을 사용했더니 시간 초과가 일어나서 sys.stdin.readline().split() 를 사용하여 해결하였다.

 

2. 몇번의 indexerror가 있어서 어떤 부분이 문제인지 살펴봤더니 인터넷에서 복사해온 sys.stdin.readline() 코드를 받는 부분이 command로 지정되어 있어서 내가 사용하던 order_list에 입력을 받고 있지 않아서 생기는 문제 였다.

 

최종 코드

import sys
#명령의 종류 5개 구현하기

# 1) 정수 x를 스택에 넣기
def push_stack(x):
    stack.append(x)
# 2) 스택에 정수가 있다면 맨 위의 정수를 빼고 출력 없다면 -1 대신 출력

def pop_stack(x):
    if stack: 
        return stack.pop()
    else:
        return -1

# 3) 스택에 들어있는 정수 개수 출력
def len_stack(stack):
    return len(stack)

# 4) 스택이 empty 1, 아니면 0 출력
def is_empty_stack(stack):
    if stack:
        return 0
    else:
        return 1

# 5) 스택에 정수가 있다면 맨위 정수 출력, 없다면 -1
def is_int_stack(stack):
    if stack:
        return stack[-1]
    else:
        return -1

######################

#명령의 수를 받을 입력 받기
N = int(input())
# 입력 최대 횟수
stack = []
order_list = []

for _ in range(N):
    order_list = sys.stdin.readline().split() 
    if order_list[0] == '1':
        push_stack(order_list[1])

    elif order_list[0] == '2':
        print(pop_stack(stack))
        
    elif order_list[0] == '3':
        print(len_stack(stack))

    elif order_list[0] == '4':
        print(is_empty_stack(stack))

    elif order_list[0] == '5':
        print(is_int_stack(stack))
    else:
        pass

 

'코딩 > Backjun' 카테고리의 다른 글

[백준] 2745번  (1) 2024.11.02
[백준 25305] 커트라인 (python3)  (0) 2024.03.28
[백준 1181] 단어 정렬 (python3)  (0) 2024.03.27
[백준 2444] 별 찍어보기 (python3)  (0) 2024.03.26
[백준 2798] 블랙잭 (Java)  (0) 2021.04.07