프로그래머스 lv2 기능 개발 스택/큐
레벨: 2
언어: JavaScript
문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
입력 값
- progresses: 순서대로 작업의 진도가 적힌 정수 배열
- speeds:개발 속도가 적힌 정수 배열
출력 값
- result: 각 배포마다 몇 개의 기능이 배포되는지 적힌 정수
📑풀이 아이디어
- 100에서 진행된 작업을 빼고 개발 속도로 나누면 몇일이 걸리는지 알 수 있다.
- 남은 일수를 배열에 넣고 뒤의 일자와 비교하여 한번에 배포가능한 수를 카운트한다.
📋풀이 코드
function solution(progresses, speeds) {
let answer = [];
let arr = [];
let cnt = 1;
let temp;
progresses.map((el, i) => {
arr[i] = Math.ceil((100 - el) / speeds[i]);
});
temp = arr[0];
for (let i = 1; i < arr.length; i++) {
if (temp >= arr[i]) {
cnt += 1;
} else {
answer.push(cnt);
cnt = 1;
temp = arr[i];
}
}
answer.push(cnt);
return answer;
}
코드 라인별 설명
progresses.map((el, i) => {
arr[i] = Math.ceil((100 - el) / speeds[i]);
});
arr라는 배열에 각 작업이 완료되기에 필요한 날짜를 저장한다.
temp = arr[0];
temp에 첫번째 작업일을 넣는다.
for (let i = 1; i < arr.length; i++)
temp에 첫번째 요소를 넣었기에 두번째부터 배열 끝까지 반복문을 돌린다.
if (temp >= arr[i]) {
cnt += 1;
}
temp에 저장된 작업일이 arr[i]의 작업일보다 크거가 같은 경우 동시에 배포가 가능하다는 의미이다
동시에 배포가 가능한경우 cnt를 1올려준다.
else {
answer.push(cnt);
cnt = 1;
temp = arr[i];
}
동시에 배포가 가능하지 않은 경우 answer 배열에 저장된 cnt를 넣고 cnt를 1로 초기화 한다.
그리고 temp에 arr[i]의 값을 넣고 다시 위의 내용을 반복한다.
남은 일자를 계산하는 아이디어를 가지고 빠르게 문제를 해결할 수 있었다.
언제나 더 좋은 방법이나 틀린 부분은 지적 바랍니다.
'지난 글 모음' 카테고리의 다른 글
[React Hooks] input onChange 사용법 (onChange)사용 예시 (0) | 2022.01.26 |
---|---|
[프로그래머스] lv2 주차 요금 계산 JavaScript (0) | 2022.01.26 |
AWS EC2 서버 구매, 접속방법 (0) | 2022.01.24 |
[JavaScript] - 원시 값과 참조 값 (0) | 2022.01.24 |
[JavaScript] - var를 말고 const, let을 써 야하는 이유 (2) | 2022.01.24 |