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

권하준·2024년 4월 9일

문제 설명

제한 사항

입출력 예

문제 풀이

  • while문으로 모든 작업이 배포될 때 까지 반복, 여기서 while문의 반복 한번은 하루를 의미
  • while문 안에서 for문을 사용하여 각 작업 현황 업데이트
  • for문을 반복할 때, 작업이 완료된 기능의 경우 바로 배포가 되지 못함, 앞의 작업이 완료 되어야 배포 가능)
    • 이미 배포 완료된 작업을 순서대로 기록해야, 현재 작업이 배포 가능한지 확인 가능
    • Stack을 사용하여 배포 완료한 작업을 기록(지금 생각해보면 그냥 int변수로 마지막에 배포한 작업만 기록해도 되지 않을까 싶음)
    • 마지막에 기록한 작업 다음이 자신의 차례이면 배포, 이때 배포 횟수 기록. 여기서 배포 횟수는 while문을 돌 때마다 초기화 됨
  • for문을 다 돌고 나서, 배포 횟수가 1번 이상이면 리스트에 기록

코드

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        // 배포된 횟수 기록
        int[] answer = new int[progresses.length];
        int idx = 0;
        
        // 배포 완료된 작업
        Stack<Integer> st = new Stack<Integer>();
        st.push(-1);
        
        // 배포 완료할때까지 반복
        while(st.size() <= progresses.length){
            int num = 0;            
            for(int i=0; i<progresses.length; i++){
                // 작업 진행
                progresses[i] += speeds[i];
                // 작업 완료되고, 작업이 배포될 순서면 배포
                if (st.peek()+1 == i && progresses[i]>=100){
                    st.push(i);
                    num++;
                }
            }
            // 배포된 기록이 있으면 answer에 추가
            if (num>0)  answer[idx++] = num;
        }
        
        return Arrays.copyOf(answer, idx);
    }
}

결과

profile
자바 BE 개발자 지망생입니다.

0개의 댓글