문제
강의에 들어있는 문제라서 문제 링크를 걸어도 되는지 모르겠다.
각 기능 개발을 하는데 걸리는 속도는 모두 다르다.
기능은 진도가 100% 일 때 서비스에 반영할 수 있다.
먼저 배포해야하는 순서대로 문제가 주어졌을 때 각 배포마다 몇 개의 기능이 배포되는지를 구하는 문제.
작업의 진도가 적한 배열 : progresses
각 작업의 개발 속도 배열 : speeds
1 <= progresses, speeds의 길이 <= 100
입출력 예시
progresses | speeds | return |
---|---|---|
[93, 30, 55] | [1, 30, 5] | [2, 1] |
접근
조금 시간이 걸렸던 것 같다.
우선 문제 해결을 위해 필요한건 각 작업이 언제 끝나는지 이다.
예시에서는 각각 “7일, 3일, 9일” 이 필요하다.
이렇게 남은 시간을 알게되면 문제를 좀 더 직관적으로 볼 수 있다.
i 번째가 배포될 때 몇 개가 같이 배포될까?
남아있는 일 수 day[i] 보다 큰 수를 만나기 전까지는 모두 같이 배포될 것이다. 위의 예에서는 7보다큰 9를 만나기 전까지, [7일, 3일]을 동시에 배포할 수 있다.
코드
- 파이썬 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def solution(progresses, speeds):
remainDayArr = remainDayCalc(progresses, speeds)
print(remainDayArr)
answer = [0]
now = 0
cnt = 1
idx = 0
for i in range(len(remainDayArr)):
if remainDayArr[now] >= remainDayArr[i]:
answer[idx] += 1
else:
answer.append(1)
now = i
idx += 1
return answer
def remainDayCalc(progresses, speeds):
remainDayArr = []
for i in range(len(speeds)):
remainWork = 100 - progresses[i]
isFloat = False
if remainWork % speeds[i] != 0:
isFloat = True
remainDay = remainWork // speeds[i]
if isFloat:
remainDay += 1
remainDayArr.append(remainDay)
return remainDayArr