공부 기록장

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

코딩 테스트/프로그래머스 문제 풀이

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

빛나무 2024. 10. 17. 10:18

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

 

프로그래머스

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

programmers.co.kr

 

문제 요약

진도가 100 프로일 때 기능을 서비스에 반영 가능
뒤 기능 먼저 개발 시, 앞에 있는 기능 배포시 함께 배포

- progresses : 배포되어야 하는 순서대로의 작업의 진도
- speeds : 각 작업의 개발 속도
각 배포마다 몇 개의 기능이 배포되는지?

 

코드 설명

from collections import deque
def solution(progresses, speeds):
    answer = []
    
    q = deque([])
    
    for p, s in zip(progresses, speeds):
        f = 100 - p
        if f % s == 0:
            q.append(f//s)
        else:
            q.append(f//s + 1)
    
    min_val = q.popleft()
    count = 1
    while q:
        now = q.popleft()
        if now <= min_val:
            count += 1
        else:
            min_val = now
            answer.append(count)
            count = 1
        
        if len(q) == 0:
            answer.append(count)
            
    
    return answer

 

우선 남은 진도와 개발 속도에 따른 각 작업의 소요 일을 q에 저장한다

 

q의 왼쪽부터 일수를 확인하는데,

현재 설정된 소요 일수보다 작은 소요 일수를 갖는 경우가 나오면, 같이 배포가 됨으로 count를 세어준다

 

큰 소요 일수를 갖는 경우가 나오면, 현재 설정된 소요 일수를 변경해준다.

 

또한, zip 함수를 사용하면 병렬적으로 여러 개의 iterable을 순회할 수 있다.

 

배운 점

- 여러 개의 iterable을 순회하고 싶을 때에는, zip() 함수를 사용하면 된다

- zip 함수는 인자 개수에 제한이 없다