Lv2. 기능개발 Javascript
https://programmers.co.kr/learn/courses/30/lessons/42586
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;
}
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;
}
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; }
댓글 환영
질문 환영
by.protect-me