알고리즘

[프로그래머스 Lv2] 기능개발 (Python)

lwkejpf 2022. 7. 2. 04:39

 


 

def solution(progresses, speeds):
    answer = []
    remain = []
    
    for p in range(len(progresses)) :
        temp = (100 - progresses[p]) 
        
        if temp % speeds[p] == 0 :
            remain.append(temp // speeds[p])
        else :
            remain.append(temp // speeds[p] +1)
            
    idx = remain[0]
    cnt = 1
    
    for r in range(1, len(remain)) :
        if idx < remain[r] :
            answer.append(cnt)
            cnt = 1
            idx = remain[r]
        else :
            cnt += 1
            
        if r == len(remain)-1 :
               answer.append(cnt)
    return answer

 

일단 입력으로 들어온 진행 속도 고려해서

작업별로 남은 일수를 계산해서 remain 에 추가해줌.

 

그리고 idx 는 첫 작업의 남은 일수로 초기화해줬고,

cnt 는 한 번에 배포하는 작업의 개수를 나타냄.

 

배포 작업은 무조건 앞에 있는 인덱스부터 차례대로 해야되기 때문에

두 번째 작업부터 돌면서 남은 일수를 비교해줬다

 

idx < remain[r]

'배포할 차례의 작업의 남은 일수 < 이후 작업의 남은 일수' 라면

그냥 현재 작업까지만 배포하면 되고,

그게 아니라면 이후 작업들까지 모아서 한 번에 배포해야 되니까

그냥 cnt 만 계속 1 증가시켜주고 다시 for문으로 돌아가서 비교할 수 있도록 해줌.

 

그리고 여기서 주의할 점은 r 이 마지막 인덱스라면

그것도 배포해줘야 하니까 따로 아래에  if 문 적어둔 거 !!