Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- advancedwebranking
- HTML
- padEnd
- document.querySelector
- 연결자
- Let
- 결합자
- function
- object
- padStart
- combinator
- 인자
- 속성선택자
- 선택자
- 상대경로
- 절대경로
- 생활코딩
- Append
- 코딩공부
- 복합선택자
- Selector
- argument
- appendChild
- CSS
- 함수
- HTMLSTUDY
- TiL
- const
- 공부일지
- src
Archives
- Today
- Total
능히 할수있다!
[프로그래머스] 고득점KIT - 기능개발 본문
🔬 문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고,
이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열
speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
✋ 제한사항
• 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
• 작업 진도는 100 미만의 자연수입니다.
• 작업 속도는 100 이하의 자연수입니다.
• 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인
작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
📌 입출력 예
progresses | speeds | return |
[93, 30, 55] | [1, 30, 5] | [2, 1] |
[95, 90, 99, 99, 80, 99] | [1, 1, 1, 1, 1, 1] | [1, 3, 2] |
✍️ 풀이
function solution(progresses, speeds) {
let answer = [];
// progresses 배열이 비어있지 않은 동안 반복
while (progresses.length > 0) {
// 작업률을 작업속도에 맞게 업데이트
for (let i = 0; i < progresses.length; i++) {
progresses[i] += speeds[i];
}
let count = 0;
// 작업 진도가 100% 이상인 작업을 배열에서 제거
while (progresses.length > 0 && progresses[0] >= 100) {
progresses.shift();
speeds.shift();
count++;
}
if (count > 0) {
answer.push(count);
}
}
return answer;
}
progresses가 빈 배열이 될때까지 작업도를 업데이트 하며 작업도가 100%이상인 작업을 배열에서 제거하는데,
while문에 progresses[0] >= 100와 같은 조건을 추가하는것으로 앞에 있는 기능의 작업도가 100%가 되었을 때
함께 배포되도록 했다.
function solution(progresses, speeds) {
let answer = [0];
// 작업이 완료되기까지 걸리는 날짜 배열 계산
let days = progresses.map((progress, index) =>
Math.ceil((100 - progress) / speeds[index])
);
let maxDay = days[0];
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;
}
다른 사람의 풀이. 완료까지 걸리는 시간을 계산한 뒤, for문을 사용해 순회하며 각 배포마다 배포 될 기능의 수를 체크하는 방법이다.
출처: https://programmers.co.kr/
'STUDY > Algorithm' 카테고리의 다른 글
[프로그래머스] 고득점KIT - 의상 (0) | 2023.06.16 |
---|---|
[프로그래머스] 고득점KIT - 완주하지 못한 선수 (0) | 2023.06.16 |
[프로그래머스] 고득점KIT - 폰켓몬 (0) | 2023.06.13 |
[프로그래머스] Lv.1 문자열 내 p와 y의 개수 (0) | 2023.06.09 |
[프로그래머스] Lv.1 자연수 뒤집어 배열로 만들기 (0) | 2023.06.09 |
Comments