자바/코딩테스트

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

대전집주인 2024. 3. 26. 14:46
728x90
SMALL

 

문제 이해

  • 진도가 100%가 되는 경우 배포가 되는데 앞의 기능이 끝나기 전까지 뒤의 기능은 배포를 할 수가 없다.
  • 뒤의 기능이 앞의 기능의 배포일보다 적다면 앞의 기능 배포날에 같이 배포 된다.
  • 개발속도에 따른 각 기능의 배포일을 구해 배열에 담는다.
  • 배포일을 두개씩 비교하는데 맨 처음에 나온 값을 first 변수에 넣고 본인보다 큰 값이 나오기전까지 cnt를 증가 시킨다.
  • 큰 값이 나오면 이전에 쌓인 cnt를 리스트에 담고 cnt를 초기화 새로운 값이 first 변수에 담긴다.
  • 마지막 기능 값이 나오면 그동안 쌓인 cnt를 집어 넣는다.
import java.util.*;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {};
        int[] mod = new int[progresses.length];
        List<Integer> list = new ArrayList<>();
        
        for(int i = 0; i<progresses.length; i++){
            mod[i] = (int)Math.ceil((100.0-progresses[i])/speeds[i]);
        }
        
        int cnt = 1;
        int first = mod[0];
        for(int i = 1; i<mod.length; i++){
            if(first >= mod[i]){
                cnt++;
            }else{
                list.add(cnt);
                first = mod[i];
                cnt = 1;
            }
            
            if(mod.length-1 == i){
                list.add(cnt);
            }
        }
        
        answer = new int[list.size()];
        for(int i =0; i<list.size(); i++){
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}
728x90
LIST