[프로그래머스] 기능개발 Python

김아현·2022년 5월 9일
0

문제 보기

🔒 문제

🔐 해결 과정

  1. 각 기능별로 (100-progress)/(speed)를 올림으로 계산해 몇 일뒤에 완성되는지 알아낸다.
  2. 앞기능이 뒷기능보다 남은 일수가 많이 남았다면, 앞기능의 남은 일수보다 적은 뒷기능들을 같이 배포한다.

🔓 풀이 (15m)

2020.

def solution(progresses, speeds):
    progresses = [-((p-100)//s) for p, s in zip(progresses, speeds)]
    result = []
    for i in range(len(progresses)):
        if len(result)==0 or result[-1][0] < progresses[i]:
            result.append([progresses[i],1])
        else:
            result[-1][1] += 1
    return [i[1] for i in result]

2022.5.9

import math
def solution(progresses, speeds):
    days = []
    for p, s in zip(progresses, speeds):
        days.append(math.ceil((100-p)/s))
    idx = 0
    result = [1]
    for i in range(1, len(days)):
        if(days[idx] >= days[i]):
            result[-1] += 1
        else:
            idx = i
            result.append(1)
    return result

🔁 feedback

math.ceil() 없이 올림처리 하는 방법
=> (p-100) => 음수, (p-100) // s => 내림한 음수(음수에서 내림은 절대값은 커짐), -((p-100)//s) => 올림한 양수

+ 다른 사람의 풀이

from math import ceil

def solution(progresses, speeds):
    daysLeft = list(map(lambda x: (ceil((100 - progresses[x]) / speeds[x])), range(len(progresses))))
    count = 1
    retList = []

    for i in range(len(daysLeft)):
        try:
            if daysLeft[i] < daysLeft[i + 1]:
                retList.append(count)
                count = 1
            else:
                daysLeft[i + 1] = daysLeft[i]
                count += 1
        except IndexError:
            retList.append(count)

    return retList

앞 기능의 남은 일수가 뒷 기능의 남은 일수보다 크거나 같으면, 앞 기능의 남은 일수를 뒤에 붙여넣기함으로써 인덱스 변수를 따로 사용하지 않고 비교할 수 있게 했다.

profile
Want to be backend developer

0개의 댓글