CodingTest/programmers

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

ukunV 2021. 9. 14. 17:57

Link

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

Solution

def solution(progresses, speeds):
    answer = []

    count = 0
    idx = 0
    while idx != len(progresses):
        for i in range(len(progresses)):
            progresses[i] += speeds[i]

        while idx < len(progresses):
            if progresses[idx] >= 100:
                count += 1
                idx += 1
            else:
                break

        if count != 0:
            answer.append(count)
            count = 0

    return answer

 

Other Solution

필자의 풀이는 특별히 언급할것이 없지만 해당 풀이는 아주 좋은 풀이라 생각하여 짧은 설명을 덧붙이도록 하겠다.

 

해당 풀이는 answer을 2차원 배열로 사용한다.

1. 먼저 progresses = [93, 30, 55], speeds = [1, 30 ,5]인 경우 첫번째 for문에서 answer = [[7, 1]]이 된다.

2. 다음 for문에서 progresses[1] (30)의 값이 100보다 크거나 같아지는 작업일은 7일보다 작기 때문에 answer = [[7, 2]]가 된다.

3. 마지막 for문에서는 progresses[2] (55)의 값이 100보다 크거나 같아지는 작업일은 7일보다 큰 9일이기 때문에 answer = [[7, 2], [9, 1]]이 된다.

def solution(progresses, speeds):
    answer = []

    for p, s in zip(progresses, speeds):
        if len(answer) == 0 or answer[-1][0] < -((p - 100) // s):
            answer.append([-((p - 100) // s), 1])
        else:
            answer[-1][1] += 1

    return [x[1] for x in answer]
🔑 key point: -((p - 100) // s)