[프로그래머스] Lv.2 기능개발 (Java)

subbni·2023년 2월 14일
0

프로그래머스

목록 보기
11/23

문제

풀이

import java.util.Stack;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        Stack<Integer> stack = new Stack<>();
        int[] neededDays = new int[progresses.length];
        for(int i=0;i<progresses.length;i++){
            neededDays[i] = (100-progresses[i])/speeds[i];
            if((100-progresses[i])%speeds[i]!=0) neededDays[i]+=1;
        }

        int cnt=1;
        int must=neededDays[0];
        for(int i=1;i<neededDays.length;i++) {
            if(must>=neededDays[i]) {
                cnt++;
            }else{
                stack.add(cnt);
                must = neededDays[i];
                cnt=1;
            }
            if(i==neededDays.length-1) stack.add(cnt);
        }

        int[] answer = new int[stack.size()];
        for(int i=answer.length-1;i>=0;i--) {
            answer[i]=stack.pop();
        }
        return answer;
    }
}
  • int[] neededDays : 각 기능의 진도율이 100 이상이 되기 위해 필요한 날의 수
neededDays[i] = (100-progresses[i])/speeds[i];
if((100-progresses[i])%speeds[i]!=0) neededDays[i]+=1;
-`needDays[i]`= `(100이 되기 위해 더 필요한 진도율)/(개발 속도)`
-여기서 if문은 필요한 날이 딱 떨어지지 않는 경우, (예를 들어 5.5일이 필요한 경우)를 처리한다.
  • Stack<Integer> stack: 각 배포마다 개발되는 기능의 수들을 저장

  • int cnt: 각 배포마다 개발되는 기능의 수

  • int must: 이번 배포를 위해 반드시 요구되는 날의 수 (=이번 배포가 진행되는 시점이라고 볼 수도 있다)

  • for문을 돌면서 must>=neededDays[i]인 경우 (=해당 기능이 이미 개발이 끝난 경우) i번째 기능 또한 배포에 포함시키는 것으로 결정되며 따라서 cnt가 1 증가된다.

  • must<neededDays[i]인 경우 (=해당 기능 개발이 아직 완료되지 않은 경우) i번째 기능 전까지 배포에 포함되게 되어 이번 배포가 끝난다.

  • if(i==neededDays.length-1) stack.add(cnt);를 만드시 해주어야 한다.

profile
개발콩나물

0개의 댓글