프로그래머스

프로그래머스 - 기능개발

yanJuicy 2024. 1. 30. 11:10
반응형

문제

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

 

프로그래머스

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

programmers.co.kr

 

 

 

풀이

기능 개발이 먼저 되어도 앞에 있는 기능과 함께 배포가 되야 하므로 큐를 사용한다.

 

progress마다 남은 작업 진도를 구한다.이는 100 - progress로 구하면 된다.

그러면 progresses [93, 30, 55]는 [7, 70, 45]로 바뀐다.

이를 작업속도로 나누면 남은 작업일을 구할 수 있다.

작업 속도는 [1, 30, 5]이므로 이걸 이용해 작업일을 구하면 다음과 같다.

[7, 3, 9]

2번 작업이 먼저 끝나지만 1번 작업이 끝났을 때 배포가 가능하다.

 

여기서 큐를 이용해 함께 배포가 가능한 작업들을 구한다.

함께 배포가 되는 선행 작업의 기준은 7이다.

7보다 뒤에 있는 작업들 중에 7과 같거나 작으면 함께 배포가 가능하다.

이것들을 큐에서 몇 개 pop할 수 있는지 구하면 된다.

 

그러면 큐에는 [9]만 남을 것이고 9 뒤로도 위와 같은 작업을 반복 하면 된다.

 

 

 

코드

python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from collections import deque
import math
 
def solution(progresses, speeds):
    q = deque([math.ceil((100 - progresses[i]) / speeds[i]) for i in range(len(progresses))])
        
    answer = []
    
    while q:
        count = 0
        remain = q[0]
        while q and remain >= q[0]:
            q.popleft()
            count += 1
        answer.append(count)
    
    return answer
cs

 

반응형