https://www.acmicpc.net/problem/10828
문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.



문제 풀이
나의 코드
# 스택(stack) 이란?
# 후입선출(LIFO : List in,First Out) 선형 자료구조.
# 마지막에 추가된 항목이 가장 먼저 제거되는 구조, 상단에서만 데이터를 삽입하고 삭제할 수 있다.
# 스택은 컴퓨터 과학에서 매우 중요한 개념으로, 다양한 알고리즘과 데이터 처리 과정에 활용
# stack 은 리스트로 []
# push -> append 함수를 사용하여 stack에 값을 추가
# push : 스택 맨 윗부분에 추가할 항목이 들어감
# pop : pop 함수를 사용하여 스택에 가장 위에 있는 값을 꺼냄
# pop : len(길이)를 사용하여 스택 안에 값이 있는지 없는지 확인
# size : len(길이) 함수를 사용하여 스택에 들어있는 정수의 개수를 출력
# empty : len(길이) 함수를 사용하여 스택 값이 있는지 없는지에 따라 출력
# import sys 를 사용하는 이유?
# -> input함수를 사용할 경우, 입력 받을 때 느리기 때문에 시간 초과가 뜰 수 있어서
import sys
# print("시작값을 입력하세요: ") # 안내 메시지를 출력
number = int(sys.stdin.readline())
# sys.stdin.readline() 한줄 전체 출력 코드
# sys.stdin.readline()을 사용하면 input 보다 속도가 빠르게 출력 된다다
stk = []
# stack 을 리스트로 저장시킨다
# 리스트로 할경우 추가, 삭제를 할 수있음
# 튜플로 저장할 경우 안에 요소를 추가 및 변경, 삭제가 불가능하기 떄문
def push(n):
stk.append(n)
# push는 append 함수를 사용해서 스택에 값을 추가가
def pop():
if len(stk) == 0:
print(-1)
else:
print(stk.pop())
# pop 함수는 스택에서 가장 위에 있는 요소를 꺼내고 그 값을 출력
# pop 함수는 가장 위에 있는 항목을 제거하고 반환한다
def size():
print(len(stk))
def empty():
if len(stk) == 0:
print(1)
else:
print(0)
def top():
if len(stk) == 0:
print(-1)
else:
print(stk[-1])
# print(stk[-1]) 이유?
# 스택 안에 요소가 얼마나 들어있는지 모르기 때문에
# top 명령어는 가장 위에 있는 정수를 출력
for i in range(number):
text = sys.stdin.readline().split()
if text[0] in 'push':
push(int(text[1]))
if text[0] in 'pop':
pop()
if text[0] in 'size':
size()
if text[0] in 'empty':
empty()
if text[0] in 'top':
top()
# if text[0] in 'push':
# push(text[1])
# split을 사용해서 입력받은 값에 공백이 있을경우 split으로 나눔
# text[0] == push로 들어갈거고 뒤에 숫자가 text[1]로 들어감
# 그럼 자연스럽게 push (입력받은 값) push함수를 호출 할 수 있다
# 그러나 입력받은 값은 문자열이므로 앞에 int를 사용하면 숫자로 변환된다'[백준] 알고리즘' 카테고리의 다른 글
| [백준] 1021번, 회전하는 큐(파이썬) - 코테준비하기 (1) | 2025.07.19 |
|---|---|
| [백준] 1966번, 프린터 큐 - 코테준비하기 (1) | 2025.07.12 |
| [백준] 1874번, 스택 수열(파이썬) -코테 준비하기 (0) | 2025.03.10 |