1 분 소요

📁 [Lv2_42586] 기능개발

import java.util.*;
import java.io.*;

class Solution {
    public ArrayList<Integer> solution(int[] progresses, int[] speeds) {
        ArrayList<Integer> answer = new ArrayList<Integer>();
        Queue<Integer> q = new LinkedList<Integer>();
        Queue<Integer> qValue = new LinkedList<Integer>();

        for(int i=0; i<progresses.length; i++){
            q.add(progresses[i]);
            qValue.add(speeds[i]);
        }


        while(!q.isEmpty()){
            int size = q.size();
            // 하루에 개발이 다 된 기능 수
            int cnt = 0;
            // 먼저 계산해주기 ( 한번 돌리기 ) - 하루
            for(int i=0; i<size; i++){
                int key = q.poll();
                int value = qValue.poll();
                // 작업 하기
                key += value;

                // 다시 넣어주기
                q.add(key);
                qValue.add(value);
            }

            for(int i=0; i<size; i++){
                int key = q.peek();

                if(key>=100){
                    cnt++;
                    q.poll();
                    qValue.poll();
                }else{
                    break;
                }
                }
            if(cnt > 0){
                answer.add(cnt);
            }
            }
        return answer;
    }
}

🤔 나의 생각

오랜만에 문제푼다…ㅋㅋ
오랜만에 풀다보니 쉽다고 생각한 문제지만 시간이 많이 걸렸다.
처음에 앞에 일정이 완료되어야 뒤에 일정을 할 수 있단 말을 모르고 멋대로 했다가 .. 실패하고
다음에 앞에가 완료되야 뒤에가 할 수 있다는 생각을 통해 Queue를 사용해야겠다는 생각이 들어 Queue를 사용해 주었다.
먼저 전체를 돌면서 하루에 할 수 있는 작업을 진행해서 저장해주고 그 값들을 이용해서 100이상이면 Queue에서 빼주고 카운팅을 했다.
만약 100보다 안크다면 뒤에 기능도 소화할 수 없기 때문에 바로 for문을 종료시켜주었다.
그래서 성공한 작업이 있으면 배열에 하루에 몇개의 기능이 성공했는지 넣어주었다.
그리고 Queue.poll() 했을 때 사이즈가 줄어드는 것을 감안 안하고 for문에 Queue.size()를 넣어줘서 오류가 떳었다.. 처음에 초기 Queue.size() 값을 저장하고 진행해야한다 !!