프로그래머스: 기능개발

Song-Minhyung·2022년 6월 23일
0

Problem Solving

목록 보기
11/50
post-thumbnail

문제

https://programmers.co.kr/learn/courses/30/lessons/42586
1. 기능의 진도가 100%일 떄 서비스에 반영할 수 있다.
2. 앞의 기능이 아직 진도가 100%가 아니라면 앞의 기능과 함께 배포된다.

입력: [progresses, speeds]

  • progress: 100 이히의 배열길이
    • 각 원소는 100 미만의 자연수
  • speeds: 100 이하의 배열길이
    • 각 원소는 100 이하의 자연수
  • 출력: 한번에 배포되는 기능의 갯수를 배열로 출력

풀이방법

접근

  1. 각 기능이 개발 완료까지 며칠이 걸리는지 계산을 먼저 해준다.
  2. 1.의 배열을 순환한다.
    2.1. 배열을 순환하며 현재요소 <= 이전요소 일경우 👉 배포++
    2.2. 연재요소 > 이전요소 일경우 👉 배포=1, result.push(배포)를 해줌
  3. 결과출력!
function solution(progresses, speeds) {
    const pastDate = [];	// 며칠 걸리는지 저장될 배열
    const result = [];		// 결과가 저장될 배열

    let bigDate = 0;		// 현재 지나온 요소중 가장 큰 요소
    let completed = 1;		// 배포할 개수
	
  	// pastDate에 며칠이 걸리는지 저장해줄 for문
    for (let i=0; i<progresses.length; i++) {
        const needDate = Math.ceil((100 - progresses[i]) / speeds[i]);
        pastDate.push(needDate);
    }
	// for문의 두번째 요소부터 시작할것임
  	// 그러므로 첫번째 요소를 가장 큰 값으로 넣어둠
    bigDate = pastDate[0]
    for (let i=1; i<pastDate.length; i++) {
        if (pastDate[i] <= bigDate) {
            completed++;
        }
        else {
            bigDate = pastDate[i];
            result.push(completed);
            completed = 1;
        }
    }
    result.push(completed);
    return result;
}

const progresses = [95, 90, 99, 99, 80, 99];
const speeds = [1, 1, 1, 1, 1, 1];
const result = solution(progresses, speeds);
console.log(result);

설명

1. pastDate에 며칠이 걸리는지 저장한다.
2. bigDate = pastDate[0]
3. for i = 1 ~ pastaDate.length
3.1 if pastDate[i] <= bigDate:
completed ++
3.2 if pastDate[i] > bigDate:
bigDate = pastDate[i]
result.push(completed)++
completed = 1
4. result.push

4에서 한번 더 push를 해주는 이유는 배열의 끝에 도달해도 계산된 completed는 push되지 않기 때문이다.

profile
기록하는 블로그

0개의 댓글