데이터 엔지니어

프로그래머스 - [LEVEL 2] 기능개발 본문

프로그래밍(Programming)/알고리즘(Algorithm)

프로그래머스 - [LEVEL 2] 기능개발

kingsmo 2020. 9. 24. 23:54

문제링크: programmers.co.kr/learn/courses/30/lessons/42586?language=python3 

 

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

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

programmers.co.kr


문제 설명

- progresses: 작업의 진도 (100% 기준)

- speeds: 작업의 속도

progress가 100이 되면 배포를 진행하는데 배포는 앞에 작업이 먼저끝나야 진행할 수 있다. 

개발은 순서와 상관없이 진행되고 배포될 때 한번에 배포되는 개수를 list로 담아 리턴하는 문제입니다.

- 예시

progresses: [93, 30, 55] speeds: [1, 30, 5]

1번 작업이 93 -> 100 까지에 7일이 걸립니다.

2번 작업은 개발은 3일만에 끝나는데 1번 작업 배포가 완료되지 않아 대기했다가 7일차에 같이 배포됩니다.

3번은 개발은 9일 걸리고 1, 2번이 배포되고나서 3번만 따로 배포됩니다.

그래서 2번 1번으로 [2, 1]을 리턴해주면 정답입니다.


풀이

매 시간이 지날때 마다 progresses의 첫번째 값이 100이 넘었는지 확인해주며 progresses, speeds를 둘 다 pop해주면 되는 문제입니다.

progresses와 speeds를 큐라 생각하고 조건을 잘 확인해주면 되는 문제입니다.

 

주의할 점

- count를 정답에 추가할 때 초기화해야 함

- pop할 때는 시간을 추가하지 않음

 

코드

def solution(progresses, speeds):
    
    answer = []
    count = 0
    time = 0
    while progresses:
        # print(progresses, speeds, answer)
        
        # 맨 앞에 값이 100보다 커지면
        if (progresses[0] + time*speeds[0]) >= 100:
            count += 1
            progresses.pop(0)
            speeds.pop(0)
        else:
            if count > 0:
                answer.append(count)
                count = 0
            time += 1
                
    answer.append(count)
    return answer

 

Comments