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

easyone·2026년 4월 23일

코딩 테스트

목록 보기
11/12

기능 개발 - level 2

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {};
        Queue<Integer> q = new ArrayDeque<>();
        int n = progresses.length;
        
        for(int i = 0; i < n;i++){
            int days = (100 - progresses[i] + speeds[i] - 1) / speeds[i];
            q.offer(days);
        }
        
        List<Integer> list = new ArrayList<>();
        
        while(!q.isEmpty()){
            int count = 1;
            int job = q.poll();
            // 작업완료된 기능보다 더 빨리 아니면 같은날에 배포가 가능하다면 같이 poll
            while(!q.isEmpty() && q.peek() <= job){
                q.poll();
                count++;
            }
            list.add(count);
        }
        
        answer = new int[list.size()];
        for (int i = 0; i < list.size();i++){
            answer[i] = list.get(i);
        }
        return answer;
    }
}

푼 방법

  • 책이랑 조금 다르게 배포 전까지의 최소 날짜를 큐에 넣었다.
  • 먼저 끝내도 배포를 못하기 때문에 순서대로 큐에 넣고, 다음 작업의 최소 남은 일수가 현재 끝낸 작업의 일수보다 작거나 같으면 같이 배포하는 걸로 처리한다.

회고

  • 큐를 써서 풀긴 했는데 꼭 쓸 필요는 없는 것 같다.
  • 핵심 아이디어? 가 딱히 없는 것 같아서 금방 풀었다. 그냥 배포 가능하면 같이 한다 정도..?
  • stream을 쓰면 코드가 간결해서 쓰려고 했는데 성능이 안좋아지는 것 같아서 그냥 stream 없이 했다.
profile
백엔드 개발자 지망 대학생

0개의 댓글