코딩테스트 & 문제 풀이

[Python]백준_10773 : 제로

Hicecream 2023. 6. 2. 00:02

2022년 8월 12일에 작성됨

 

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

 

10773번: 제로

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경

www.acmicpc.net

 

 

문제 분석

정수 k를 입력하고, k개의 정수 num을 입력한다.

num이 0인 경우와 0이 아닌 경우로 나눠서
0이라면 리스트의 최근의 수를 지우고, 아니라면 num을 리스트에 추가한다.

최종적으로 리스트에 있는 수들의 합을 출력한다.

 

 

소스 코드 (⭕)

stack = []  # 스택 리스트 생성
k = int(input())

for i in range(k):
    num = int(input())
    if num == 0:  # num이 0이면 리스트의 마지막 값 삭제
        stack.pop()
    else:  # 0이 아니라면 num을 리스트에 추가
        stack.append(num)

print(sum(stack))  # 리스트에 있는 수들의 합 출력

 

코드 분석

1. 빈 리스트 stack을 생성하고, 정수 k를 입력받는다.

2. for문을 이용하여 k번 반복한다.

  2-1. k개의 정수 num을 입력받는다.

  2-2. num이 0이면, pop 함수를 이용해 리스트의 마지막 값을 삭제한다.

  2-3. num이 0이 아니라면, num을 리스트에 추가해준다.

3. stack 리스트에 있는 수들의 합을 출력한다.

 


✍️pop() 함수~ 마지막 또는 특정 인덱스의 요소를 삭제

- 리스트.pop() 형태

:: 리스트의 마지막 요소를 삭제한 뒤 삭제한 요소를 반환

>>> a = [10, 20, 30]  # 리스트 a 정의
>>> a.pop()  # 리스트에서 마지막 요소 30 삭제
30  # 삭제한 요소 30 반환
>>> a
[10, 20]  # 리스트 a의 마지막 요소가 삭제됨

 

- 리스트.pop(인덱스) 형태

:: 해당 인덱스의 요소를 삭제한 뒤 삭제한 요소를 반환, del 리스트[인덱스]와 같음

>>> a = [10, 20, 30]  # 리스트 a 정의
>>> a.pop(1)  # 인덱스 1의 위치의 요소 값 20을 삭제
20  # 삭제한 요소 20 반환
>>> a
[10, 30]  # 리스트 a의 특정 인덱스의 요소가 삭제됨

+) pop 대신 del을 사용해도 상관없다.

 

 

✍️del 키워드

- del 리스트[인덱스] 형태

>>> a = [10, 20, 30]
>>> del a[1]
>>> a
[10, 30]

 

💯자세한 설명은 링크 참고

https://dojang.io/mod/page/view.php?id=2281 

 

 

 

end

pop 함수에 대해 확실히 알게된 것 같다.
stack이 뭔지 검색하다가 파이썬 자료구조 내용이 막 나오는데 공부엔 끝이 없구나 느꼈다..ㅋㅋ