JS-algorithm/프로그래머스

[프로그래머스] 기능 개발 (javascript)

yunieyunie 2023. 7. 8. 15:03

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

 

프로그래머스

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

programmers.co.kr

 

🤔 해결방법

1. 기능별로 완료되기까지 필요한 날 needDay를 구한다.

2. needDay의 각 요소를 비교하며 동일한 날짜에 완료되는 기능 수를 구해 baepo에 추가한다.

 

🔑 풀이

function solution(progresses, speeds) {
    let needDay = []; //기능별로 완료되기까지 필요한 날
    let baepo = [];

    //기능별로 완료되기까지 필요한 날 구하기
    for (let i = 0; i < progresses.length; i++){
      let day = Math.ceil((100-progresses[i]) / speeds[i]);
      needDay.push(day); // needDay = [5, 10, 1, 1, 20, 1]
    }

    let compareDay = needDay[0];
    let count = 1;

    for (let i = 1; i < needDay.length; i++) {
      if (needDay[i] > compareDay) {
        baepo.push(count);
        compareDay = needDay[i];
        count = 1;
      } else {
        count++;
      }
    }

    baepo.push(count); //baepo = [1, 3, 2]
    return baepo;
  }

 

만약 현재 날짜(needDay[i])가 compareDay보다 크다면 이전까지 세었던 count 값을 baepo 배열에 추가, compareDay를 현재 날짜로 업데이트하고 count를 1로 초기화한다.

그렇지 않으면, 같은 날짜에 완료되는 기능이므로 count를 증가시킨다.

이 문제는 스택/큐에 관한 문제로 비교적 어렵지 않아 삽질 없이 잘 풀 수 있었다.

다음 포스팅을 보며 스택/큐에 대해 복습했다.

https://jud00.tistory.com/entry/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%8A%A4%ED%83%9DStack%EA%B3%BC-%ED%81%90Queue%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

 

[자료구조] 스택(Stack)과 큐(Queue)에 대해서 알아보자!

📌 스택(Stack)이란 무엇일까? 스택(Stack)은 "쌓다"라는 의미로, 데이터를 차곡차곡 쌓아 올린 형태의 자료구조입니다. 조금 더 설명하자면, 위의 사진과 같이 데이터가 순서대로 쌓이며 가장 마지

jud00.tistory.com