728x90
📌 첫 번째 풀이 : 리스트의 pop을 이용한 풀이
# 리스트의 pop을 이용한 풀이
n = int(input())
arr = []
for i in range(n):
arr.append(int(input()))
while 0 in arr:
for i in range(len(arr)):
if arr[i] == 0:
arr.pop(i)
arr.pop(i-1)
break
print(sum(arr))
첫 번째로 생각한 방법은 미리 리스트를 받아 놓고 처음부터 순차적으로 탐색한 뒤 0을 발견하면 그 자리와 그 앞자리를 pop 해줌으로써 리스트의 길이를 줄여나가는 방법이다.
deque를 쓰고 싶었으나 deque에는 특정 인덱스를 pop 할 수 없어기에 일반 리스트 pop을 사용했다.
통과는 하였으나 시간이 3400ms으로 생각보다 오랜 시간이 걸리는 것을 확인할 수 있었다.
📌 두 번째 풀이 : 입력받을 때부터 0을 확인하는 방법
# 입력받을 때부터 확인하는 방법
n = int(input())
arr = []
for _ in range(n):
num = int(input())
if num == 0:
del arr[-1]
else:
arr.append(num)
print(sum(arr))
이 방법은 처음 리스트를 입력받을 때부터 0을 확인하고 0이 존재한다면 0을 append 해주지 않음과 동시에 현재까지 리스트의 마지막 원소를 삭제해주는 것이다.
이 방식을 사용했더니 시간이 124ms로 10분의 1 이상 시간이 감축된 것을 확인할 수 있었다.
결론
- 풀이 1은 리스트를 다 받고 지속적인 반복문이 0이 나올 때마다 리스트의 길이는 줄어들지만 다시 for문을 돌아야 하지만
- 풀이 2는 그럴 필요가 없기 때문에 이러한 결과가 나온 것 같다.
'Algorithm' 카테고리의 다른 글
리트코드(LeetCode) 15번 세 수의 합(3 Sum) (0) | 2021.09.25 |
---|---|
백준 알고리즘 파이썬(Python) 14719번 빗물 (0) | 2021.09.25 |
리트코드(LeetCode) 1번 두 수의 합(Two Sum) (1) | 2021.09.17 |
백준 알고리즘 파이썬(Python) 1764번 듣보잡 (0) | 2021.09.15 |
백준 알고리즘 파이썬(Python) 1316번 그룹 단어 체커 (0) | 2021.09.13 |