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

woolee의 기록보관소·2022년 10월 28일
0

알고리즘 문제풀이

목록 보기
25/178

문제 출처

프로그래머스 lev2 - 기능개발

문제

나의 풀이

  1. for문 순회하면서 각각 소요되는 시간을 ch 배열로 정리
  2. 배열의 크기를 비교하며 answer값에 넣기
  • 이때, 주어진 tc만 보고 단순히 ch[i] < ch[i+1]일때만 판단하면 안 되고, max 업데이트로 접근해야 한다. (늘 그렇듯이 주어진 tc는 우리를 낚으려고 노력한다..)
function solution(progresses, speeds) {
  let answer = [];
  let ch = Array.from({length:speeds.length}, () => 0);
  for (let i=0; i<progresses.length; i++) {
    while (progresses[i] < 100) {
      progresses[i] += speeds[i]
      ch[i]++;
    }
  }

  let cnt=1;
  let max=ch[0];
  for (let i=1; i<ch.length; i++) {
    cnt++;
    if (max < ch[i]) {
      answer.push(cnt-1);
      cnt=1;
      max=ch[i];
    }

    if (i==ch.length-1) answer.push(cnt);
 
  }
  return answer;
}

// console.log(solution([93, 30, 55], [1, 30, 5]));
// console.log(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]));
console.log(solution([1, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]));

다른 풀이

days를 구할 때, 나는 while문으로 하나하나 넣어줬다면, 이 풀이는 수학적으로 100-progress/speeds[idx]로 해결했다.

function solution(progresses, speeds) {
  let answer = [0];
  let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
  let maxDay = days[0];

  for(let i = 0, j = 0; i< days.length; i++){
      if(days[i] <= maxDay) {
          answer[j] += 1;
      } else {
          maxDay = days[i];
          answer[++j] = 1;
      }
  }

  return answer;
}

// console.log(solution([93, 30, 55], [1, 30, 5]));
// console.log(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]));
console.log(solution([1, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]));

shift()로 배포 작업 표현한 풀이

function solution(progresses, speeds) {
  var answer = [];

  while(speeds.length > 0) {
      // 개발
      for(let i in speeds) {
          if(progresses[i] < 100) {
              progresses[i] += speeds[i];
          }
      }

      // 배포
      let deploy_count = 0;
      while(progresses[0] >= 100) {
          progresses.shift();
          speeds.shift();
          deploy_count++;
      }
      if(deploy_count > 0) {
          answer.push(deploy_count);
      }
  }

  return answer;
}

// console.log(solution([93, 30, 55], [1, 30, 5]));
// console.log(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]));
console.log(solution([1, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]));
profile
https://medium.com/@wooleejaan

0개의 댓글