한 시간 동안 이 방법 저 방법을 해봐도 해결하지 못해서 '맨 앞 작업을 기준으로 판단하면 된다.'는 힌트를 보고 정답 코드를 작성할 수 있었다.
첫 번째 예시인 progress=[39, 30, 55], speeds=[1, 30,5] 일 때 과정을 설명하면 다음과 같다.
각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있지만, 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포돼야 한다는 조건이 존재한다.
따라서 앞에 있는 기능부터 배포되어야 하므로, progresses의 맨 앞 작업인 progresses[0]이 100 이상인지 확인하면 된다.
100 이상이면 배포 작업 수(release)+1을 해주고, 해당 작업을 progresses에서 제거(pop)한다.
제거 후 progresses에서 pregresses[0]이 100 이상이면 계속해서 같은 작업을 반복한다.
만약 100 이상이 아니라면, 계속해서 작업을 진행한다.
두 번째 예시는 다음과 같다.
위 과정을 코드로 나타내면 다음과 같다.
코드
def solution(progresses, speeds):
answer = []
while progresses:
release = 0 # 배포 개수
# 첫 번째 작업이 100 이상이면 배포+1, 작업 목록에서 제거
while progresses and progresses[0] >= 100:
release += 1
progresses.pop(0)
speeds.pop(0)
# 계속해서 작업
progresses = [p+s for p, s in zip(progresses, speeds)]
# 배포할 작업이 있으면
if release > 0:
answer.append(release)
return answer
작업이 존재하면 계속해서 반복해야하므로 while문을 사용해 주었다.
또한, 맨 앞 요소가 100 이상이면 계속해서 배포 작업 수를 세주어야 하므로 이 부분도 while문으로 작성해 주었다.
배포할 작업이 존재하는지는 release가 1 이상인지 확인하여 리스트에 추가해 주면 된다.
반응형