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

2020. 3. 25. 12:53프로그래머스/LEVEL 2

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {};
        int sol = 0;
        int flag;
        int[] complete = new int[progresses.length];
        ArrayList<Integer> temp = new ArrayList<>();
        
        for(int i=0; i<complete.length; i++){
            if((100-progresses[i])%speeds[i] == 0){
                complete[i] = (100-progresses[i])/speeds[i];
            }else{
                complete[i] = (100-progresses[i])/speeds[i] + 1;
            }
        }
        
        flag = complete[0];
        
        for(int i=0; i<complete.length-1; i++){
            
            if(flag<complete[i+1]){
                sol++;
                temp.add(sol);
                sol=0;
                flag = complete[i+1];
                }
            else{
                sol++;
                
            }
            
            if(i == complete.length-2){
                sol++;
                temp.add(sol);
            }
        }
        
        answer = new int[temp.size()];
        for(int i=0; i<answer.length; i++){
            answer[i] = temp.get(i);
        }
        
        return answer;
    }
}

---------------------------------------------------------------------------------------------------------------------------

2020.06.23

 

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {};
        int count=1;
        
        List<Integer> remain = new ArrayList<>();
        List<Integer> answerList = new ArrayList<>();
        
        
        for(int i=0; i<progresses.length; i++){
            int remainder = 100-progresses[i];
            
            if(remainder%speeds[i]==0){
                remain.add(remainder/speeds[i]);
            }else{
                remain.add(remainder/speeds[i]+1);
            }
        }
        
        int flag = remain.get(0);
        
        for(int i=0; i<remain.size()-1; i++){
            if(flag<remain.get(i+1)){
                answerList.add(count);
                count=1;
                flag = remain.get(i+1);
            }else{
                count++;
            }     
        }
        
        answerList.add(count);
        
        answer = new int [answerList.size()];
        for(int i=0; i<answer.length; i++){
            answer[i] = answerList.get(i);
        }
        return answer;
    }
}

 

1. 완성하는데 얼마나 걸릴지 remain리스트를 만든다.

2. remain리스트를 읽으며 해당 인덱스에서의 작업보다 일찍 끝나거나 같이 끝난 작업이 있으면 count를 올리고, 더 늦게 끝난작업이 있으면 그 때까지의 count를 answerList에 담는다. (이후에 더 일찍끝난 작업이 있더라도 그 작업은 더 늦게 끝난작업이 배포될때까지 배포 될 수 없기 때문에 counting하지 않음.)

3. 기준점 flag를 변경시키며 리스트를 다읽고, 마지막에 존재하는 count를 answerList에 넣는다.