728x90

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보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

 

출력

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

 

예제 입력
14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top
예제 출력
2
2
0
2
1
-1
0
1
-1
0
3

 

코드 및 설명
import sys
input=sys.stdin.readline

n=int(input())
test=[]
def stack(how):
    if how[0]=='push':
        test.append(how[1])
    elif how[0]=='pop':
        if len(test)==0:
            print(-1)
        else:
            print(test.pop())
    elif how[0]=='size':
        print(len(test))
    elif how[0]=='empty':
        if len(test)==0:
            print(1)
        else:
            print(0)
    elif how[0]=='top':
        if len(test)==0:
            print(-1)
        else:
            print(test[len(test)-1])
for i in range(n):
    how=input().split()
    stack(how)

이 문제는 단순히 메인에서만 코드를 입력해도 되는 문제이다.

처음 풀었을 때는 리스트의 크기를 선언해놓고 풀었는데 이번에는 이를 제외하고 함수로 매번 호출해서 진입하는 형식으로 풀어보았다. 

 

먼저 메인인 부분을 설명하자면 숫자를 입력받는다.

그리고 이를 여기 코드에서 제일 아래 for문으로 반복문을 돌린다. 

input().split()으로 한 이유는 입력을 받아 나누어서 리스트로 저장하기 위해 진행하였다. 이후 함수 호출하면서 입력받는 내용을 전달한다.

 

여기부터는 문제에서 요구하는대로 그대로 진행하면된다.

입력받은 명령어를 " "을 통해 문자열이 같은지 판단하여 진입하도록 하였다.

먼저 push 부분에서는 입력받은 내용 중  뒤에 부분에 있던 숫자를 추가하는 방식으로 진행했다.

pop 부분은 파이썬에서 .pop이라는 뽑아주는 문법이 있어 이를 활용하였다.  하지만 여기서 길이가 0이라면 진행이 불가하므로 len 명령어로 길이를 판단해주어 if문으로 구분하였다.

size부분은 역시나 python의 명령어 len으로 길이를 재 출력해주었고 empty 역시 길이를 재 구분해서 지정된 결과를 나오도록 하였다.

top은 제일 뒷부분을 출력해주어야 해서 총 길이에서 -1을 해 출력해주었다. 리스트도 0으로 시작하기 때문에 길이보다 리스트의 인덱스가 하나 작기 때문이다. 

이런 방식으로 매번 출력하도록 하면 스택이 완성된다.

 

728x90

'Python > Baekjoon' 카테고리의 다른 글

[Python] 백준 10815 숫자카드  (0) 2022.09.06
[Python] 백준 13305 주유소  (0) 2022.09.03
[Python] 백준 1920 수찾기  (0) 2022.07.07
[Python] 백준 2630 색종이 만들기  (0) 2022.07.04
[Python] 백준 1021 회전하는 큐  (0) 2022.05.28

+ Recent posts