Algorithm/Programmers

[Python] 기능개발

느낌표 공장장 2021. 5. 20. 22:05
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에 추가해준다.

* 작업일 수 계산 식

  1. per - 100 ➡︎ 음수
  2. (per - 100)  //  speed   ➡︎ 내림한 음수 ➡︎ 음수에서 내림을 하면 절댓값은 커진다. ( -3 // 2 = -2 )
  3. -((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