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

Hyebin·2021년 8월 11일
0

Data structure / Algorithm

목록 보기
16/19
post-thumbnail
post-custom-banner

각 기능의 작업 상황과 개발 속도를 인자로 받아 각 배포마다 몇 개의 기능이 배포되는지를 구하는 문제이다.
각 기능의 개발속도는 모두 다르지만 뒤에 있는 기능이 먼저 완료되더라도 앞에 있는 기능이 배포될 때까지 기다렸다가 함께 배포되야한다.

더 자세한 문제 설명은 여기로!
https://programmers.co.kr/learn/courses/30/lessons/42586

풀이

  • 남은 작업량을 구한다.
  • 각 작업별로 며칠이 걸리는지 계산
  • 어떻게? 남은 작업량 / 스피드 = 반올림값
  • 작업일 배열을 순회하며
  • 앞 요소가 뒷 요소보다 크거나 같은 경우 -> 해당 뒷 요소 갯수까지 카운트
  • 앞 요소가 뒷 요소보다 작을 경우 -> 해당 요소 갯수까지 카운트
function solution(progresses, speeds) { //작업의 개발 속도 배열, 스피드 배열
  
// 배포시마다 배포되는 기능 갯수를 배열로 리턴
// 먼저 들어간 작업이 먼저 처리되어야 한다. (선입선출) => 큐
  
    let works = progresses.map((work,idx) => Math.ceil((100-work)/speeds[idx]))
    
    let result = []
    let count = 1
    let first = works[0]
    //[5,10,1,1,20,1]
    for(let i=1; i<works.length; i++) {
        if(first >= works[i]) {
            count++
        } else {
            result.push(count)
            count = 1
            first = works[i]
        }
    }
    result.push(count)
    
    return result    
}
post-custom-banner

0개의 댓글