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. 풀이 1은 리스트를 다 받고 지속적인 반복문이 0이 나올 때마다 리스트의 길이는 줄어들지만 다시 for문을 돌아야 하지만 
  2. 풀이 2는 그럴 필요가 없기 때문에 이러한 결과가 나온 것 같다.

 

 

 

 

 

 

 

 

 

 

 

 

 

복사했습니다!