본문 바로가기
Coding Test/Programmers

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

‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀

문제 👉 <코딩테스트 연습 - 기능개발 | 프로그래머스>

1. 문제

  1. 배포 순서에대로 작업의 진도 (progresses)와 작업의 속도 (speeds)를 통해 작업이 완료되었을 때 몇개의 작업이 배포되는지 return 한다.
  2. 뒤에 있는 작업이 먼저 완료되면 앞의 작업이 완료될 때 까지 기다렸다가 같이 배포된다.
  3. 배포는 하루에 1번 가능하다.

2. 풀이

Queue 를 이용한 문제 풀이

  • 입력 순서대로 반환하면 되기 때문에 작업의 완료 시간을 Queue 로 나타낸다.
  1. progresses 와 speeds 를 통해 작업이 완료되는 시간을 계산하고 Queue에 넣는다.
    1. 작업이 완료되는 시간을 계산할 때 소수점을 통해 반올림을 해야하므로 100.0 을 통해 타입은 int 가 아닌 double 을 사용한다.
  2. Queue에서 앞의 작업 완료 시간과 뒤에 있는 작업 완료 시간을 비교하여 배포될 작업의 계수를 구한다.

3. 코드

import java.util.*;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        Queue<Integer> queue = new LinkedList<>();
        for (int i=0; i<progresses.length; i++) {
            // 소수점 계산을 위해 100.0 (double) 사용
            queue.add((int)Math.ceil((100.0 - progresses[i]) / speeds[i]));
        }

        List<Integer> answer = new ArrayList<>();
        while (!queue.isEmpty()) {
            int day = queue.poll();
            int cnt = 1;

            while (!queue.isEmpty() && day >= queue.peek()) {
                queue.poll();
                cnt++;
            }
            answer.add(cnt);
        }        

        return answer.stream().mapToInt(Integer::intValue).toArray();
    }
}


References


🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋

댓글