[programmers] Lv2. 機能開発Javascript|protect-me


🕊 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


同時に、ドアが無限リングに乗らないように注意します.
  • プログラマー他の人の答え
  • 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;
    }
  • 22021.04.19-
  • が最初に作成されました.댓글 환영 질문 환영 by.protect-me