def solution(progresses, speeds):
days = []
for per, speed in zip(progresses, speeds) :
day = -((per - 100)// speed)
days.append(day)
count = 1
answer = []
for i in range(1, len(days)) :
if days[i] <= days[i-1] :
days[i] = days[i-1]
count += 1
else :
answer.append(count)
count = 1
if i == (len(days)-1) :
answer.append(count)
return answer
풀이
1) 각 기계의 남은 작업일 수 계산
days = []
for per, speed in zip(progresses, speeds) :
day = -((per - 100)// speed)
days.append(day)
zip함수를 이용해 progresses와 speeds에서 값들을 하나씩 받아온뒤, 남은 작업량과 스피드에 따른 남은 작업일 수를 계산하여 days에 추가해준다.
* 작업일 수 계산 식
- per - 100 ➡︎ 음수
- (per - 100) // speed ➡︎ 내림한 음수 ➡︎ 음수에서 내림을 하면 절댓값은 커진다. ( -3 // 2 = -2 )
- -((per - 100) // s) ➡︎ 올림한 양수
2) 기능 배포
for i in range(1, len(days)) :
if days[i] <= days[i-1] :
days[i] = days[i-1]
count += 1
else :
answer.append(count)
count = 1
if i == (len(days)-1) :
answer.append(count)
1. 남은 일수가 담겨있는 리스트에서 days[i-1]과 days[i]값을 비교하여 앞 기능의 일수가 더 많이 남아있다면
배포될 기능의 수를 +1 해준다. 그리고 다음 값의 비교를 위해 값을 넘겨준다.
2. days[i] 값이 더 크다면 그 전의 기능들은 작업이 끝나 배포가 가능하니, 더해온 배포될 기능의 수를 answer에 추가해주고, count를 1로 리셋 해준다.
- days = [10, 1, 1, 20, 1] 라면 남은 일수가 각각 10, 1, 1일 경우에는 10일째에 기능 3개를 배포할 수 있다.
3. i가 마지막 값이라면 answer에 더해온 배포될 기능의 수를 추가해준다.
'Algorithm > Programmers' 카테고리의 다른 글
[Python] 튜플 (0) | 2021.05.26 |
---|---|
[Python] 예산 (0) | 2021.05.20 |
[Python] 음양 더하기 (0) | 2021.05.20 |
[Python] 폰켓몬 (0) | 2021.05.20 |
[Python] 문자열 압축 (0) | 2021.05.20 |