PROGRAMMERS_Lv2_기능개발
📁 [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() 값을 저장하고 진행해야한다 !!