[lv2] 기능개발

걸음걸음·2023년 3월 3일
0

Test

목록 보기
15/29

문제링크

  • 작업의 진도가 적힌 정수 배열 progresses
  • 각 작업의 개발 속도가 적힌 정수 배열 speeds
  • 진도가 100%일 때 서비스에 반영 가능
  • 가장 앞에 있는 기능부터 배포 가능
    앞의 기능보다 먼저 100% 달성한 기능도 앞의 기능이 배포될 때 함께 배포
  • 배포는 하루에 한 번, 하루의 끝에 이루어짐
    ex) 진도율 95% 개발속도 4% 기능 > 배포는 2일 후
  • 각 배포 때마다 몇 개의 기능이 배포되는지 return
function solution(progresses, speeds) {
    // 각 기능별 완료까지 걸리는 시간
  	let days = progresses.map((ele, idx)=>Math.ceil((100-ele)/speeds[idx]))
    const answer = []
    let count = 1;
  	// 앞에 있는 기능이 배포될 때까지 걸리는 기간
    let prev = days[0];
    for(let i = 1 ; i < progresses.length; i++){
        // 앞의 기능이 뒤의 기능보다 늦게 완료될 때
        if(prev >= days[i]){
            count+=1;
        }else{
            // 앞의 기능이 완료 되었을 때
            answer.push(count);
            count=1;
            prev = days[i];
        }
    }
    answer.push(count);
    return answer;
}

다른 사람의 풀이

function solution(progresses, speeds) {
  const length = progresses.length;
  let answer = [],
    i = 0, // 배열의 인덱스
    t = 0, // 완료까지 걸리는 경과 시간
    numberOfReleases = 0;
  while (i < length) {
    numberOfReleases = 1;
    t = Math.ceil((100 - progresses[i]) / speeds[i++]);

    while (progresses[i] + speeds[i] * t > 99) {
      numberOfReleases++;
      i++;
    }
    answer.push(numberOfReleases);
  }
  return answer;
}

while을 중첩으로 사용,
앞의 기능이 완료되었을 때 뒤에 이미 완료된 기능이 얼마나 있는지를 계산하는 방식

profile
꾸준히 나아가는 개발자입니다.

0개의 댓글