[백준] 10828 - 스택 (Python)
문제
코드
import sys
input = int(sys.stdin.readline())
stack = []
for i in range(input):
line = sys.stdin.readline().split()
if line[0] == 'push':
stack.append(line[1])
elif line[0] == 'pop':
if len(stack) == 0:
print(-1)
else:
print(stack.pop())
elif line[0] == 'size':
print(len(stack))
elif line[0] == 'empty':
if len(stack) == 0:
print(1)
else:
print(0)
elif line[0] == 'top':
if len(stack) == 0:
print(-1)
else:
print(stack[-1])
결과
정리
개념
Stack은 다음 그림과 같이 후입선출이다. (Last-In, First-Out)
이 문제에서 input() 함수를 사용하지 않고 sys.stdin.readline() 함수를 사용한 이유는 시간초과 에러가 뜨기 때문이다. sys.stdin.readline() 함수를 사용하면 한줄에 여러 입력 값을 받을 수 있다. ('import sys'를 추가해줘야 함)
코드(주석o)
import sys
input = int(sys.stdin.readline())
stack = []
for i in range(input):
line = sys.stdin.readline().split()
# input변수에서 엔터 기준으로 한줄을 읽어서
# line라는 변수에 띄어쓰기를 기준으로 리스트 형태로 나눠서 저장
# 즉, line는 리스트 변수
# push일때
# push X : 정수 X를 스택에 넣는 연산
if line[0] == 'push':
stack.append(line[1]) # append() : 리스트의 맨 마지막에 요소 추가
# pop일때
# 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력
# 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력
elif line[0] == 'pop':
if len(stack) == 0:
print(-1)
else:
print(stack.pop()) # pop() : 리스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제
# size일때
# 스택에 들어있는 정수의 개수를 출력
elif line[0] == 'size':
print(len(stack))
# empty일때
# 스택이 비어있으면 1, 아니면 0을 출력
elif line[0] == 'empty':
if len(stack) == 0:
print(1)
else:
print(0)
# top일때
# 스택의 가장 위에 있는 정수를 출력
# 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력
elif line[0] == 'top':
if len(stack) == 0:
print(-1)
else:
print(stack[-1]) # 리스트의 맨 마지막 요소를 제거하지 않고 가져오기만 할 때에는 [-1] 사용
Author And Source
이 문제에 관하여([백준] 10828 - 스택 (Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@alsdud5766/백준-10828-스택-Python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)