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
기타
- 생각보다 풀이가 간단했다