처음 문제 읽었을 땐 무슨 소린가 했는데, 입력받은 숫자들의 리스트를 스택으로 쌓고 0이 입력될 경우 그 전에 마지막으로 입력된 값을 하나 지워주는 방식으로 풀이하면 된다.
참고로 스택은 가장 나중에 들어온 자료가 가장 먼저 처리되는 LIFO(Last-In-First-Out) 자료구조이다.
n = int(input())
z = []
for i in range(n):
num = int(input())
if num == 0:
z.pop()
else:
z.append(num)
print(sum(z))
마지막에 들어온 값을 꺼내기 위해 사용하는 pop()은 리스트에서 맨 마지막 요소를 출력하면서 그 요소를 리스트에서 삭제하는 함수다.
하지만 파이썬에서느 추가적으로 특정 위치에 있는 요소에 대해서 pop함수를 사용할 수도 있다.
pop(x) 와 같이 pop함수 뒤에 하나의 인자를 넣어주면 x번째 인덱스에 있는 요소를 꺼낼 수 있다. 뒤에서 x번째 값을 꺼내고 싶다면 pop(-x)를 사용한다.
문제는 num(인풋값)이 0이면 리스트 마지막 값을 삭제, 그렇지 않으면 리스트에 num을 추가하는 코드를 짜면 끝.
파이썬 리스트 값 삭제
종류 내용 clear() 모든 요소 삭제 pop() 지정한 위치 값을 삭제하고 삭제한 값 취득 remove() 지정한 위치 값과 같은 값을 검색후 처음 값을 삭제 del 위치 또는 범위를 지정 삭제
- del은 함수가 아니라 예약어이다. 그렇기 때문에 함수와 같이 사용할 수 없다.
사용방법은 del 뒤에 한 칸을 띄고서 'del array [인덱스]' 형태로 사용한다.