MingyuPark

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

Algorithm

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

MingyuPark 2022. 11. 3. 22:57

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42842

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


아이디어

리스트를 큐로 사용해서 계산한다. 

현재 우선순위가 가장 높은(가장 앞에 있는) 작업의 진도를 본다. 진도가 100이상인 경우 배포할 수 있지만, 그렇지 않은 경우 작업이 더 진행되어야 한다. 따라서 가장 앞에 있는 작업의 진도가 100보다 작은 경우 계속 작업을 진행한다.

 

[95, 90, 99, 99, 80, 99] → [96, 91, 100, 100, 81, 100] [97, 92, 101, 101, 82, 101] [98, 93, 102, 102, 83, 102] [99, 94, 103, 103, 84, 103] [100, 95, 104, 104, 85, 104] 

* 1개의 작업을 배포할 수 있게 됨

* 작업이 100%를 넘어서 101%, 102%와 같이 진행되지는 않겠지만, 어차피 배포할 수 있기 때문에 전혀 중요하지 않음

 

첫 번째 작업이 배포될 수 있게 되는 순간, 뒤에 이어서 배포할 수 있는 작업을 탐색한다. 여기서는 그 다음 작업은 완료되지 않았기 때문에 첫 번째 작업만 배포할 수 있다. 

> 배포하고 난 후의 작업은 전혀 고려할 필요가 없기 때문에 progress, speeds에서 모두 제외한 후, 다시 같은 작업을 수행한다. progress에 더 이상 값이 남아있지 않을 때까지 수행하면 된다. 

 

[95, 104, 104, 85, 104] → [96, 105, 105, 86, 105] → [97, 106, 106, 87, 106] → [98, 107, 107, 88, 107] → [99, 108, 108, 89, 108] → [100, 109, 109, 90, 109]

* 3개의 작업을 배포할 수 있게 됨

 

[90, 109] → ∽ → [100, 119] 

* 2개의 작업을 배포할 수 있게 됨

* progress에 남은 작업이 없기 때문에 반복문이 종료됨


Solution

def solution(progresses, speeds):
    answer = []
    
    while progresses : 
        if progresses[0] >= 100 : 
            cnt = 0 
            while progresses and progresses[0] >= 100 : 
                cnt += 1 
                progresses.pop(0)
                speeds.pop(0)
            answer.append(cnt)
        else : 
            progresses = [x + add for x, add in zip(progresses, speeds)]
            
        
    return answer

'Algorithm' 카테고리의 다른 글

[백준 1931] 회의실 배정  (0) 2023.01.25
[백준 11047] 동전 0  (0) 2023.01.23
[프로그래머스] 기능 개발 1  (0) 2022.11.03
[프로그래머스] 네트워크  (0) 2022.11.03
[백준 1059] 좋은 구간  (1) 2022.09.27
Comments