https://programmers.co.kr/learn/courses/30/lessons/42586
처음엔 아래와 같이 풀었다
def solution(progresses, speeds):
answer = []
temp = 0
while progresses:
if progresses[0] >= 100:
del progresses[0]
del speeds[0]
temp += 1
else:
if temp > 0:
answer.append(temp)
temp = 0
for i in range(len(progresses)):
progresses[i] += speeds[i]
if temp > 0:
answer.append(temp)
print(answer)
return answer
1. 배열을 순회한다
2. 100점 이상인 점수를 만나면 배포카운트를 1 증가한다
3. 100점 미만인 점수를 만나면 배포카운트가 0 이상인 경우, 그동안 증가된 배포카운트를 정답에 저장한다.
4. 배포카운트를 0으로 초기화한다
5. 전체 배열을 순회하며 속도만큼 값을 누적한다
6. 마지막으로 남은 배포카운트가 있다면 정답에 저장한다
좀 더 효율이 좋은 풀이
from collections import deque
def solution(progresses, speeds):
answer = []
progresses = deque(progresses)
speeds = deque(speeds)
count = 0
time = 0
while progresses:
if progresses[0] + speeds[0] * time >= 100:
count += 1
progresses.popleft()
speeds.popleft()
else:
if count > 0:
answer.append(count)
count = 0
time += 1
answer.append(count)
return answer
print(solution([93, 30, 55], [1, 30, 5]))
# [93, 30, 55], [1, 30, 5] [2, 1]
# [95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1] [1, 3, 2]
배열의 첫번째 원소를 빼야할 일이 많기 때문에 효율을 높이기 위해 deque 를 사용하였다.
기본원리는 첫번째 풀었던 것과 큰 차이는 없으나
time 이라는 개념을 도입하여 첫번째 속도와 time 을 곱하고 진척률을 더한 값이 100이 넘는지 검사하여 while 내 for loop 를 없애 효율을 높였다.