프로그래머스 Lv.2 기능개발

2024. 7. 8. 15:37알고리즘문제 풀이/프로그래머스

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

풀이

 

각각의 프로세스의 배포까지 작업하는 날짜의 수(left_day)에 대한 리스트(left_days)를 구한다.

    n = len(speeds)
    left_days=[]
    for i in range(n):
        left = 100-progresses[i]
        if left % speeds[i] == 0:
            left_day = left // speeds[i]
        else:
            left_day = left // speeds[i] + 1
        left_day = int(left_day)
        left_days.append(left_day)

 

 

각 배포마다 몇 개의 기능이 배포되는지 구한다.

 

(각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있다.

이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포된다.)

 

    cnt = 0
    target_day = 0

    for left_day in left_days:
        if left_day > target_day:
            target_day = left_day
            answer.append(cnt)
            cnt = 1
        else:
            cnt += 1
    
    answer = []
    answer.append(cnt)
    answer = answer[1:]

 

answer = answer[1:] 의 이유

cnt = 0, target_day=0이므로 

반복문을 시작할 때

맨 처음 if의 구절에 항상 true가 나오고 이후 

answer.append(0)을 하게 되어

answer[0] = 0이 되기 때문이다.

따라서 이 부분을 제거해야 되기 때문이다.

전체 코드

def solution(progresses, speeds):
    n = len(speeds)
    left_days=[]
    for i in range(n):
        left = 100-progresses[i]
        if left % speeds[i] == 0:
            left_day = left // speeds[i]
        else:
            left_day = left // speeds[i] + 1
        left_day = int(left_day)
        left_days.append(left_day)
    
    cnt = 0
    target_day = 0
    
    for left_day in left_days:
        if left_day > target_day:
            target_day = left_day
            answer.append(cnt)
            cnt = 1
        else:
            cnt += 1
    
    answer = []
    answer.append(cnt)
    answer = answer[1:]
    return answer