Problem Solving

프로그래머스 기능개발

onaeonae1 2022. 1. 10. 13:27

문제 설명

- Progress List, Speed List 가 주어진다

- 각 Progress는 100이 되어야 "배포"가 가능

- Speed List는 각 Progress 별 작업 속도를 나타낸 것

- 앞의 Progress가 끝나야 뒤의 것이 같이 배포가 가능함

- 즉, 실행이 완료되는데 걸리는 시간을 미리 구해두고, 앞에서부터 순회

- 순회중일때 지금 보다 오래 걸리는게 있으면 막히는것(=막히기 전의 작업들은 뭉쳐서 배포가능하다)

- 막히기 전까지 계속 합치고, 막히면 List에 추가 =

 

문제 풀이

- Progresses, Speeds를 Zip으로 묶어서 깔끔하게 처리 가능

- 실행이 완료되는데 걸리는 시간을 List로 구성

  - div, mod 등으로 적당히 처리

- 순회하면서 막히는 구간 찾고, 막히면 List에 Append

 

코드

def make_day_list(pair_item):
    progress, speed = pair_item
    temp_value = (int)((100-progress) / speed)
    mod_value = (100 - progress) % speed
    if (100-progress) % speed != 0 :
        temp_value = temp_value + 1
        
    return temp_value
    
def parse_day_list(temp_list):
    max_val = temp_list[0]
    ret = 1
    ret_list = []
    temp_list.append(99999)
    for i in range(0, len(temp_list)-1):
        if temp_list[i+1] > max_val:
            max_val = temp_list[i+1]
            ret_list.append(ret)
            ret = 1
        else:
            ret = ret + 1
        
    return ret_list
    
def solution(progresses, speeds):
    temp_list = list(map(make_day_list, list(zip(progresses, speeds))))
    
    # parse_day_list(temp_list)
    
    answer = parse_day_list(temp_list)
    return answer

기타

- 생각보다 풀이가 간단했다