풀이
[93, 30, 55] 라는 배열이 주어지고 각 개발 속도는 [1, 30, 5] 이다. 개발 속도를 구하는 식은
(100 - 현재 개발진행퍼센트) / 개발속도 이다. 93일 경우 (100 - 93) / 1 하면 되는데 이게 나누다가 소수점이 나오는 경우도 계속 발생하기에 Math.ceil 을 통해 올림을 해줘야 한다. Math.ceil((100 - 93) / 1)) 하면 된다. 이렇게 하면 개발완료까지 남은 일수를 모두 구할 수 있고 이걸 map 을 통해 수행한다.
let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
그 다음 특정 변수에 첫번째 개발이 끝날때까지 남은 일수 즉 days의 첫번째 요소를 담는다. 그리고 같은날에 배포할 값들을 그룹화한다.
let maxDay = days[0];
let result = [0]; // 정답으로 리턴할 배열 아직 배포결과 안나와서 0만 넣음
반복문을 통해 maxDay 변수아 days에 있는 요소들을 전부 비교하는데 days 에 있는 요소가 클 경우는 같은날 배포 못하고 다른날 배포를 해야한다. 반대로 작을 경우에는 같은날 배포할 수 있기 때문에 그날 배포할 값에 +1 하고 클 경우는 1을 result배열에 넣으면 된다.
for(let i =0; i< dats.length; i++) {
if(days[i] > maxDay){
maxDay = days[i];
result.push(1); // 다른날 배포할 기능 하나 추가
}else {
result[result.length - 1]++; // 배열에 마지막 값이 그룹화된 배포기능들
}
}
전체코드
function solution(progresses, speeds) {
let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
let maxDay = days[0];
let result = [0];
for (let i = 0; i < days.length; i++) {
if (days[i] > maxDay) {
maxDay = days[i];
result.push(1);
} else {
result[result.length - 1]++;
}
}
return result;
}
'알고리즘' 카테고리의 다른 글
프로그래머스 - 다리를 지나는 트럭 (Javascript) 풀이 (0) | 2024.06.15 |
---|---|
프로그래머스 - 프로세스 (Javascript) 풀이 (0) | 2024.06.12 |
프로그래머스 - 같은 숫자는 싫어 (Javascript) 풀이 (0) | 2024.06.08 |
프로그래머스 - 추억 점수(Javascript)풀이 (0) | 2024.06.05 |
프로그래머스 - 달리기 경주(Javascript)풀이 (0) | 2024.05.08 |