Posts [알고리즘] 프로그래머스 - 기능개발
Post
Cancel

[알고리즘] 프로그래머스 - 기능개발


문제

강의에 들어있는 문제라서 문제 링크를 걸어도 되는지 모르겠다.

각 기능 개발을 하는데 걸리는 속도는 모두 다르다.
기능은 진도가 100% 일 때 서비스에 반영할 수 있다.
먼저 배포해야하는 순서대로 문제가 주어졌을 때 각 배포마다 몇 개의 기능이 배포되는지를 구하는 문제.
작업의 진도가 적한 배열 : progresses
각 작업의 개발 속도 배열 : speeds
1 <= progresses, speeds의 길이 <= 100


입출력 예시

progressesspeedsreturn
[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


This post is licensed under CC BY 4.0 by the author.

[알고리즘] 프로그래머스 - 예산_소팅

[알고리즘] 프로그래머스 - 가장 큰 수