코딩테스트

[JS] 기능개발

미안하다 강림이 좀 늦었다 2023. 12. 18. 19:43

 

 

난이도: Lv.2

문제: https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

알고리즘

1. 각 기능의 진도가 100%가 되기까지 며칠이 걸리는지를 배열에 저장한다.

2. 1.의 배열에서 시작 원소를 인덱스를 저장해 놓고, 배열을 순회하며 시작 원소보다 큰 원소가 나오면 해당 원소의 인덱스와 시작 원소의 인덱스 차를 구하여 정답 배열에 넣고, 시작 원소의 인덱스와 시작 원소 값을 업데이트한다.

 

 

코드

function solution(progresses, speeds) {
    var answer = [];
    const publishDate = [];

    progresses.forEach((progress, idx) => {
        publishDate.push(Math.ceil((100 - progress) / speeds[idx]));
    })

    let startIdx = 0;
    let startDate = publishDate[0];
    publishDate.forEach((date, currentIdx) => {
        if (date > startDate) {
            answer.push(currentIdx - startIdx);
            startIdx = currentIdx;
            startDate = date;
        }
    })
    answer.push(progresses.length - startIdx);

    return answer;
}

 

 

주저리

스택/큐 문제라는데 그런지는 잘 모르겠다. 입출력 예만 보고는 어렵게 풀뻔했는데 입출력 예 설명 보니까 어떻게 풀어야 할지 감이 와서 시간 별로 안 들이고 풀었다.