본문 바로가기
2021/코딩테스트

[프로그래머스] Lv.2 - 기능개발 (python)

by 에이도 2021. 1. 4.

programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

 

def solution(progresses, speeds):
    # 배포 날 몇 개의 기능 배포되는지 list
    answer = []
    
    # 작업의 개수가 있을경우 반복
    while len(progresses) > 0:
        
        # 람다를 통해 작업 진도와 속도를 더해서 진행되는 작업률을 표현 
        # (이때, 100이 넘어가도 계속 진행했습니다. 왜냐하면 100이 넘어가면 완성이 된거기때문에 binary_class로 분류)  
        progresses = list(map(lambda x,y:x+y, progresses, speeds))
        count_index = []
        
        # 완성된 작업 진도의 개수만큼 for문 반복, 이때 작업 우선순위 앞에부터 확인
        for i in range(len(progresses)):
            # 앞에서부터 작업이 완성(작어 진도 100이상)이 있다면, count_index에 완성 index추가(완성된 작업물의 index까지만 append)
            if progresses[i] >= 100:
                count_index.append(i)
            # 만약 앞에서부터 작업이 완성되다가 완성되지 않은게 있다면 break
            else:
                break
        # 완성작업물이 있다면 몇개 배포할 수 있는지 answer에 append
        if len(count_index) > 0:
            answer.append(len(count_index))
            
            #배포 개수 counting 후 작업 진도와 작업 속도에서 각 index를 빼줍니다.
            # 이때 앞 index부터 뺀다면, 뒤 인덱스에 변화가 있기때문에 뒤 인덱스부터 빼주었습니다.
            for j in count_index[::-1]:
                progresses.pop(j)
                speeds.pop(j)
    return answer

print(solution([93, 30, 55],[1, 30, 5]))

print(solution([95, 90, 99, 99, 80, 99],[1, 1, 1, 1, 1, 1]))

[out]
[2,1]
[1,3,2]

 

댓글