[Python/Programmers] 기능개발

정나린·2022년 3월 9일

문제

1. 난이도: 프로그래머스 Level 2

2. 문제요약:

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.

또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.

먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.

3. 문제핵심: 큐(Queue)

  • 큐: 먼저 들어온 데이터가 먼저 나가는 형식 (선입선출)
  • 입구와 출구가 모두 뚫려 있느 상태

내 코드

from collections import deque;
import math;

def solution(progresses, speeds):
    pro = deque(progresses)
    sp = deque(speeds)
    result = 1
    answer = []
    days = []

    while pro:
        leftover = 100 - pro.popleft()
        s = sp.popleft()
        days.append(math.ceil(leftover/s))
	d = deque(days)
    
    day = d.popleft()
    while d:
        d_day = d.popleft();
        if day >= d_day:
            result += 1;
        else:
            answer.append(result);
            result = 1;
            day = d_day;
    answer.append(result);
    return answer

이상 코드

def solution(progresses, speeds):
    Q=[]
    for p, s in zip(progresses, speeds):
        if len(Q)==0 or Q[-1][0]<-((p-100)//s):
            Q.append([-((p-100)//s),1])
        else:
            Q[-1][1]+=1
    return [q[1] for q in Q]
  1. zip을 활용
  2. 음수 // 양수 (나머지는 항상 양의 정수)
  3. 바로 전 task와만 비교하면 됨
  4. popleft할 필요가 없다면 '큐' 사용할 필요도 없음

0개의 댓글