🕊 Link

Lv2. 기능개발 Javascript
https://programmers.co.kr/learn/courses/30/lessons/42586

🧑🏻‍💻 Code(javascript)

function solution(pg, spd) {
  const answer = [];
  while (pg.length > 0) {
    for (let i = 0; i < pg.length; i++) {
      pg[i] = pg[i] + spd[i];
    }

    if (pg[0] >= 100) {
      let cnt = 0;
      for (let j = 0; j < pg.length; j++) {
        if (pg[j] >= 100) cnt++;
        else break;
      }
      answer.push(cnt);
      while (cnt > 0) {
        pg.shift();
        spd.shift();
        cnt--;
      }
    }
  }
  return answer;
}

💡 Solution

function solution(pg, spd) {
  const answer = [];
  while (pg.length > 0) {
    // pg의 요소에 각각의 spd만큼 더해줌
    for (let i = 0; i < pg.length; i++) {
      pg[i] = pg[i] + spd[i];
    }
	// pg의 첫번째 요소가 100을 넘는 경우
    if (pg[0] >= 100) {
      let cnt = 0;
      // 그 뒤에 100을 넘는 요소가 있는지 확인하고 count
      for (let j = 0; j < pg.length; j++) {
        if (pg[j] >= 100) cnt++;
        else break;
        // else break를 하지 않으면 100을 넘긴 모든 pg에 대해 count함
        // 앞의 pg가 끝나지 않은 상태에서 배포는 불가능하기 때문에 break
      }
      answer.push(cnt);
      // count만큼 pg와 spd에서 요소를 제거
      while (cnt > 0) {
        pg.shift();
        spd.shift();
        cnt--;
      }
    }
  }
  return answer;
}

👨🏻‍💻💭 Self Feedback

while문이 무한루프를 타지 않도록 주의

  • programmers 다른 사람의 풀이
function solution(progresses, speeds) {
  let answer = [0];
  // 각 pg의 잔여 작업 일수를 미리 계산
  let days = progresses.map((progress, index) =>
    Math.ceil((100 - progress) / speeds[index])
  );
  let maxDay = days[0];
  // i, j 두 변수를 할당한 것이 인상점, ++j 활용
  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;
}

  • 2021.04.19 - 최초 작성

댓글 환영 질문 환영
by.protect-me

profile
protect me from what i want

0개의 댓글