코딩테스트/프로그래머스

99클럽 코테 스터디 1일차 TIL, Queue(기능개발)

feel2 2024. 5. 22. 18:13
반응형

1. 문제 정의

 

2. 문제 접근

순차적으로 배포를 해야하고, 앞에 배포가 안되면 뒤에 배포도 기다려야 하니 Queue를 사용하면 될 것 같다.

3. 문제 풀이

  1. Queue에 배포 시간을 순차적으로 적재
  2. 배포될때마다 그 뒤에 배포가 이미 완료면 같이 처리
  3. 정답 출력

4. 코드

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer;
        List<Integer> list = new ArrayList<>();
        Queue<Integer> q = new LinkedList<>();
        
        for(int i = 0; i < progresses.length; i++){
            int day = 1;
            int pro = progresses[i];
            int speed = speeds[i];
            while(pro+speed*day < 100){
                day++;
            }
            System.out.println(day);
            q.add(day);
        }
        
           while (!q.isEmpty()) {
            int day = q.poll();
            int deploy = 1;


            while (!q.isEmpty() && q.peek() <= day) {
                q.poll();
                deploy++;
            }
            

            list.add(deploy);
        }
        
        answer = new int[list.size()];
        
        for(int i = 0; i < list.size(); i++){
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}

 

5. 회고

Queue를 활용하여 간단하게 해결할 수 있는 문제였다. 다만, q.peek() 해줄 때 null 일 수 있으니 꼭 !q.isEmpty() 통해 Queue가 안 비어었는지 체크를 해주자!

반응형