GaGe

[프로그래머스] 기능개발 - java 본문

알고리즘/[2020] 프로그래머스

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

Sorrel 2020. 4. 20. 19:25
import java.util.ArrayList;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        //int[] answer = {}; 항상 answer에 크기를 지정해줘야 한다. 아직 모르니 나중에 선언해줌
        int index=0;
        int num=0;
        ArrayList<Integer> semi = new ArrayList<>();
        while(true){ // 하루 루틴
            for(int i =0; i<progresses.length; i++){ //하루마다 진도 더해줌
                progresses[i]+=speeds[i];
            }
            if(progresses[index]>=100){ //100이상인지 확인하는 루틴 A
                num++; //연속되는 완료 작업 count
                for(int i = index+1 ; i<progresses.length ; i++){ //현재 index 다음으로 100이상이 연속되는지 확인
                    if(progresses[i]<100){ //100보다 작으면 
                        index=i; //거기서부터 다시 A
                        break; //완료된 작업이 어디까지 이어졌는지 찾는 루틴 끝
                    }
                    else{//그 다음것도 100보다 크다면 count
                        num++;
                    }
                    index++;
                }
                
                semi.add(num); //결과를 차례로 semi에 추가
                num=0; //다음 완료되는 갯수를 위해 0으로 초기화
            }
            if(index==(progresses.length-1)&&progresses[index]>=100){ //작업이 완료되었으면 while문 break
                break;
            }
        }
        
        int []answer = new int [semi.size()]; //정답 배열 만들고
        for(int j =0; j<semi.size(); j++){ //정답 옮기기
            answer[j]=semi.get(j);
        }
        
        return answer;
    }
}

->다시 원본 리스트를 건들이는 초기 아이디어로 돌아옴.

 

 

아래는 아이디어 도출과정

import java.util.Stack;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {};
        int index=0;
    
        while(true){
            int num = 0;
            Stack<Integer> stack = new Stack<>();
            for(int i = progresses.length-1; i>=0;i--){
                stack.add(progresses[i]+speeds[i]);
            }
            while(true){
                if(stack.peek()>=100){
                    stack.pop();
                    num++;
                }
                else
                    break;
            }
            answer[index]=num;
            index++;
            
            if(stack.empty()){
                break;
            }
        }
        return answer;
    }
}

->시간초과 (아마 while문에서 못 빠져나온듯)

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {};
        int index = 0;
        int answerIndex =0 ;
        while(index<progresses.length){
            int num = 0 ;
            for(int i =index; i<progresses.length; i++){ //매일 마다 일단 작업진도 +함
                progresses[i]+=speeds[i];
            }
            if(progresses[index]>=100){
                while(index<progresses.length&&progresses[index]>=100){
                    index++;
                    num++;
                }
                if(index==(progresses.length-1)){
                    answer[answerIndex]=1;
                    break;
                }
                answer[answerIndex]=num;
                answerIndex++;
            }
        }
        
        
        
        return answer;
    }
}
Comments