문제 출처
[문제 요약]
입력으로 부르는 돈의 횟수
그 이후에 돈이 얼마인지 주어진다.
다만 실수로 돈을 부르는 경우가 있는데 그 때는 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)
[백준] 11651 좌표 정렬하기 2 (Baekjoon Problem 11651: sort coordinate 2) (0) | 2023.08.18 |
---|---|
[백준] 10989 수 정렬하기 3 (Baekjoon Problem 10989: Sort 3) (0) | 2023.08.17 |
[백준] 2292 벌집 (Baekjoon Problem 2292: Honeycomb) (0) | 2023.08.16 |
[백준] 2231 분해합 (Baekjoon Problem 2231: Sum of Decomposed Numbers) (0) | 2023.08.16 |
[백준] 11866 요세푸스 문제 0 (Baekjoon Problem 11866: Josephus problem 0) (0) | 2023.08.14 |
댓글 영역