[프로그래머스] 스택/큐 - 기능개발

김준영·2023년 3월 20일
0

코딩테스트

목록 보기
12/22

풀이

import java.util.*;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        ArrayList<Integer> result = new ArrayList<>();
        Queue<Integer> queue = new LinkedList<>();

        for(int i = 0; i < progresses.length; i++){
            if((100 - progresses[i]) % speeds[i] == 0){
                queue.add((100 - progresses[i]) / speeds[i]);
            } else{
                queue.add((100 - progresses[i]) / speeds[i] + 1);
            }
        }

        int num = queue.poll();
        int count = 1;
        while(!queue.isEmpty()){
            if(num >= queue.peek()){
                count++;
                queue.poll();
            }else{
                result.add(count);
                count = 1;
                num = queue.poll();
            }
        }
        result.add(count);
        return result.stream().mapToInt(i -> i).toArray();
    }
}
  1. 날짜 결과를 넣을 result 리스트, 큐를 사용.
  2. (100% - 현재 작업률) / 하루 작업률을 계산해서 큐에 넣어준다.
  3. 큐에서 수를 뽑고 count를 1로 선언한다.
  4. 큐가 빌때까지 반복문을 돌리면서, 처음 수와 큐에 처음 수를 비교하여 뽑은 첫 수가 큰 경우, count++를 해주며 큐에서 뽑아 버린다.
  5. 처음 수와 큐에 처음 수를 비교하여 첫 수가 작은 경우, 그 수가 나가도 뒷 수가 못나오므로, count를 결과리스트에 넣어주고, count를 1로 초기화, 큐에 첫 수를 뽑아 비교하는 수로 지정한다.
  6. 마지막 결과 리스트에 count를 넣어주고 배열로 변환하여 반환.
profile
ㅎㅎ

0개의 댓글