본문 바로가기
algorithm/Programmers

스택/큐 기능개발

by 이쟝 2022. 2. 13.

https://programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

import java.util.Queue;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;


class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
    
        Queue<Integer> queue = new LinkedList<Integer>();
        
        // 100까지 되기까지 걸리는 각 인덱스작업 시간 
        // (100 - 진도율)/개발속도 = 작업시간
        // 나누고 무조건 올림처리를 해주어야 함(개발속도가 95%이면 (100-95)/4 = 1.2)
        for(int i=0; i<progresses.length; i++){
            queue.offer((int)Math.ceil((double)(100-progresses[i])/speeds[i]));
        }
        
        // 현재 인덱스보다 더 작은 크기의 인덱스를 비교한뒤에 list에 추가하기
        // 현재 인덱스의 값보다 더 작다면 ++ 해야 함
        List<Integer> list = new ArrayList<Integer>();
        
        int current = queue.poll(); // 제일 처음 수(다음 인덱스와 비교하려는 값)
        int cnt = 1;  // 제일 처음 수를 더해주기
        
        while(!queue.isEmpty()) { // queue에 값이 없을때까지 while문 실행
            int next = queue.poll(); // 그 다음 인덱스를 비교
            if(current >= next) { // 현재인덱스의 값이 다음인덱스의 값보다 크면
                cnt ++;  // cnt에 더해주기
            }else {                    // 현재인덱스의 값보다 다음인덱스의 값이 크다면
                current = next;  // 다시 비교하기 위해 다음 인덱스를 현재 인덱스로
                list.add(cnt);             // list에 return 값을 주고
                cnt = 1;                   // 다시 비교하기 위해 cnt를 1로
            }
        }
        list.add(cnt);
        
        int[] answer = new int[list.size()]; // answer[]에다가 list의 원소를 넣어주기
        for(int i=0; i<list.size(); i++) {
            answer[i] = list.get(i);
        }
        return answer;
    }
}