본문 바로가기
프로그래머스/Lv.2

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

by MINU.SHINNNN 2024. 8. 5.

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

 

프로그래머스

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

programmers.co.kr

풀이

현재 진도 progresses 와 진도율 speeds가 주어질 때 배포하는 날에 몇개의 기능을 배포하는지 담아 리턴하는 문제이다.

 

먼저 배포까지 남은 일수를 모든 progress에 대해 구해준다. 이때 ceil을 사용해 올림처리 한다. (7/3 = 2.33... 이므로 3일만에 처리 가능함)

 

 

다음 작업의 배포일까지 남은 일수가 현재 작업보다 크다면, 이때는 지금까지 완료한 기능을 배포할 수 있다는 의미이다.

answer에 담고 count는 초기화한다.

 

배포할 수 없는 경우, 다음 작업의 값을 현재 값으로 치환하고 count += 1 처리해준다.

 

마찬가지로 큐를 사용해서도 문제를 풀이할 수 있다. 알고리즘 흐름은 동일하다

from math import *

def solution(progresses, speeds):
    daysLeft = list(map(lambda x: (ceil((100 - progresses[x]) / speeds[x])), range(len(progresses))))
    count = 1
    answer = []
    for i in range(len(daysLeft)):
        try: 
            if daysLeft[i] < daysLeft[i+1]:
                answer.append(count)
                count = 1
            else:
                daysLeft[i+1] = daysLeft[i]
                count += 1
                
        except IndexError:
            answer.append(count)
            
    return answer

 

큐 사용 풀이

from math import *
from collections import deque

def solution(progresses, speeds):
    daysLeft = list(map(lambda x: (ceil((100 - progresses[x]) / speeds[x])), range(len(progresses))))
    answer = []
    
    q = deque()
    q.append(daysLeft[0])
    idx = 1
    while len(q) != 0:
        v = q[0]
        try:
            if v >= daysLeft[idx]:
                q.append(daysLeft[idx])
            else:
                answer.append(len(q))
                q.clear()
                q.append(daysLeft[idx])
                
        except Exception:
            answer.append(len(q))
            break
            
        idx += 1

    return answer