[백준 10773: 제로] 파이썬 풀이 _ 스택 (stack)
10773번: 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경
www.acmicpc.net
문제
나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다.
재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다.
재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다.
재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자!
입력
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000)
이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다.
정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할 수 있다.
출력
재민이가 최종적으로 적어 낸 수의 합을 출력한다. 최종적으로 적어낸 수의 합은 231-1보다 작거나 같은 정수이다.
💻 코드 및 해설
import sys
input = sys.stdin.readline
money_stack = [] # 결과를 담을 stack 생성
for _ in range(int(input())): # 정수 K 만큼 for문 반복
money = int(input())
if money == 0: # 입력받은 값이 0이면
money_stack.pop() # 가장 최근에 쓴 값을 지움
else: # 0이 아니면
money_stack.append(money) # 해당 값을 stack에 추가
print(sum(money_stack)) # stack의 값들의 합을 출력
stack을 이용해 풀이하였습니다-!
- 결과를 담을 빈 list를 생성합니다.
- 첫 번째 줄에 주어진 정수 K만큼 for문을 반복하면서,
- 입력된 값이 0이면, 가장 최근에 쓴 값을 지우기 위해 stack에서
pop()
을 하고, - 입력된 값이 0이 아니면, 해당 값을 stack에 추가하기 위해
append()
를 하였습니다.
- 입력된 값이 0이면, 가장 최근에 쓴 값을 지우기 위해 stack에서
- money_stack에 저장되어있는 값들의 합을 출력하면 정답이 출력됩니다.
✏️ 파이썬에서의 stack
stack이란?
스택(stack)은 '쌓다'라는 의미로, 데이터를 차곡차곡 쌓아 올린 형태의 자료구조입니다.
데이터가 순서대로 쌓이며 가장 마지막에 삽입된 자료가 가장 먼저 삭제되는 LIFO(Last-In-First-Out, 후입선출) 자료구조입니다.
스택은 정해진 방향으로만 쌓을 수 있으며, top으로 정한 곳을 통해서만 접근할 수 있습니다.
새로 삽입되는 자료는 top이 가리키는 가장 맨 위에 쌓이게 되며, 자료를 삭제할 때도 top을 통해서 삭제가 가능합니다.
스택에서의 삽입 연산을 push, 삭제 연산을 pop이라고 합니다.
파이썬에서의 stack
파이썬에서는 list를 이용해 쉽게 stack을 구현할 수 있습니다.
Stack :: init
스택 자료구조를 초기화 할 때는 빈 리스트를 만들어주면 됩니다.
stack = []
Stack :: push
스택에 원소를 넣는 push 연산은, append() 메서드를 이용해 리스트의 맨 마지막에 원소를 넣을 수 있습니다.
stack = [1, 2, 3, 4]
stack.append(5)
Stack :: pop
스택에서 원소를 제거할 때는 pop() 메서드를 이용해 리스트의 가장 마지막 원소를 제거하고, 제거한 원소를 리턴받을 수 있습니다.
stack = [1, 2, 3, 4]
stack.pop()
Stack :: top
pop()은 원소를 제거하면서 리턴해주지만, 제거하지 않고 값만 가져오고 싶다면 [-1]을 이용합니다.
stack = [1, 2, 3, 4]
print(stack[-1])
📍 참고 링크
[자료구조] 스택(Stack)과 큐(Queue)에 대해서 알아보자!
📌 스택(Stack)이란 무엇일까? 스택(Stack)은 "쌓다"라는 의미로, 데이터를 차곡차곡 쌓아 올린 형태의 자료구조입니다. 조금 더 설명하자면, 위의 사진과 같이 데이터가 순서대로 쌓이며 가장 마지
jud00.tistory.com
[Python] Stack 사용하기
파이썬에서의 스택 = list를 사용 파이썬은 스택 자료구조는 따로 제공하지 않는다. 다만 기본 클래스인 list를 통해 스택을 흉내 낼 수 있다. 스택은 어떤 자료구조인가요? 스택은 가장 나중에 들
ooeunz.tistory.com