상세 컨텐츠

본문 제목

[백준] 10773 제로 (Baekjoon Problem 10773: Zero)

파이썬

by Riella 2023. 8. 17. 16:45

본문

728x90

 

문제 출처

[문제 요약]

입력으로 부르는 돈의 횟수

그 이후에 돈이 얼마인지 주어진다.

다만 실수로 돈을 부르는 경우가 있는데 그 때는 0을 말하면 지울 수 있다.

잘못 부른 돈을 제외한 돈들의 합을 출력으로 프린트 해야한다.


[풀이]

룹(loop)을 하나만 쓰고 풀수 있는 방법을 고안해낸 결과

sum이라는 변수, 그리고 유효한 돈을 관리하는 리스트(list)인 lst를 만들었다.

여기에 지워야할 인덱스(index)를 나타내는 previdx(이전인덱스)라는 변수를 만들었다.

 

n만큼 룹을 돌면서

숫자가 들어오는 경우:

sum에 input더해줌

lst에도 input더해줌

previdx는 더해진 수를 가리키게 함

 

0이 들어오는 경우:

sum에 previdx만큼 빼줌

lst에서도 previdx위치에 있는 input을 빼줌

previdx는 더해진 수의 이전 자리를 가리키게 함


[유의할 점]
0이 아닌 input이 들어온 경우, previdx에 i를 assign하면 index out of bound error가 뜬다. 왜냐하면 0때문에 lst의 길이가 i보다 작아지는 경우가 있기 때문

따라서 input이 온 경우는 previdx += 1, 0이 온 경우는 previdx -= 1을 하도록 하자.


[파이썬 3 코드]

# -*- coding: utf-8 -*-
from sys import stdin

if __name__ == "__main__":
    n = int(stdin.readline())

    sum = 0
    lst = []
    previdx = -1
    for i in range(n):
        toadd = int(stdin.readline())
        if toadd != 0:
            sum += toadd
            lst.append(toadd)
            previdx += 1
        else:
            sum -= lst[previdx]
            del lst[previdx]
            previdx -= 1

    print(sum)

관련글 더보기

댓글 영역