본문 바로가기

알고리즘 공부/백준 > Python3

[백준 파이썬] #10828: 스택

https://www.acmicpc.net/problem/10828

 

10828번: 스택

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

www.acmicpc.net

 

[정답]

 

먼저 stack에 대한 함수들을 정의한다.

1. 'push X: 정수 X를 스택에 넣는 연산이다.' → push(X): append() 함수를 사용하여 리스트 stack에 인자값 X를 push한다.

2. 'pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.' → pop(): len(stack)==0이라면 -1을, len(stack)==0이 아니라면 pop() 함수를 사용하여 stack에 가장 위에 있는 정수를 pop한다.

3. 'size: 스택에 들어있는 정수의 개수를 출력한다.' → size(): len() 함수를 사용하여 stack의 길이를 출력한다.

4. 'empty: 스택이 비어있으면 1, 아니면 0을 출력한다.' → empty(): len(stack)==0이라면 -1을, len(stack)==0이 아니라면 0을 출력한다.

5. 'top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.' → top(): len(stack)==0이라면 -1을, len(stack)==0이 아니라면 스택의 가장 위에 있는 정수 즉 stack[-1]을 출력한다.

 

 

6. 명령어 수를 N에 입력받는다. 스택의 역할을 할 리스트 stack을 정의한다.

7. for문을 돌면서 명령어를 comm에 입력받는다. comm을 split()으로 받아 comm=push 1일 경우, comm[0]=push, comm[1]=1로 되도록 한다. comm[0]이 각각 'push', 'pop', 'size', 'empty', 'top' 경우를 나누어 위에서 정의한 알맞은 함수에 적용한다.