본문 바로가기
코딩테스트/백준 알고리즘

백준 알고리즘 | 10773 : 제로 (Python / 파이썬)

by 함께 공부해요 2020. 11. 26.


제로 성공출처다국어분류

시간 제한

메모리 제한

제출

정답

맞은 사람

정답 비율

1 초

256 MB

15322

10137

8713

67.616%

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

 

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보다 작거나 같은 정수이다.

알고리즘 분류

구현

자료 구조

문자열

스택


백준 알고리즘 # 10773번 : 제로

k = int(input())
ls = []

for i in range(k):
    n = int(input())
    if n == 0:
        ls.pop()
    else:
        ls.append(n)

result = sum(ls)

print(result)

 

풀이

엄청 쉬운 스택문제👏🏻

1. k 변수로 정수를 입력받고, ls 변수로 빈 리스트를 설정한다.

2. for문으로 n 변수를 설정해서 그 다음 정수들을 입력받는다.

3. if문을 통해서 잘못된 수를 부를 때마다 0을 외쳐서 가장 최근에 쓴 수를 지운다는 식을 세운다.

key point

0이 나오면 pop()으로 리스트 []에 들어있는 수를 빼준다.

그 외에는 리스트에 append(n)로 추가해준다.

예제 입력 2를 예시로 들자면

k 변수로 정수 10을 입력받아서 for문을 통해 10번 반복을 하고

n변수에 1부터 쭉 10개의 정수를 입력받고

if문을 통해서 리스트에 [1, 3, 5, 4]까지 append 되지만

0, 0이 나오므로 다시 [1, 3]이 되고 (pop으로 인해 빠짐)

7, 0이 나오므로 그대로 [1, 3] 유지

0, 6으로 인해 [1, 6]이 ls 변수에 저장되고

4. result = sum(ls)로 마지막에 ls 리스트에 있는 수들을 합친 수를 print(result)해주면 끄-읏!🙌🏻

세한 코드가 궁금하신 분들은 아래 GitHub 코드를 참고해주세요🙏🏻

 

wook2124/Algorithm-Test

Practice algorithm. Contribute to wook2124/Algorithm-Test development by creating an account on GitHub.

github.com

최종 소스코드

댓글