[programmers] 기능개발 - Java

programmeaow·2022년 6월 16일
0

알고리즘

목록 보기
2/2

문제 : 프로그래머스 - 기능개발

📝풀이

출처 : [프로그래머스] 기능개발 - JAVA

위의 답변을 참고하여 알고리즘 공부를 했다.

각 기능은 정해진 순서대로만 배포가 가능하다. 앞서 진행한 작업이 완료되지 않는다면 배포를 할 수 없다.

for 반복문이 progresses 배열의 길이만큼 반복 동작하며 작업에 소요되는 기간을 구한다.
큐는 입력 순서대로 반환하므로, 큐에 해당 작업 기간을 넣어준다.

큐가 공백인지를 while문을 통해 검증하고 , queue.poil() 을 사용하여 날짜를 day에 넣어준다.

현재 기능의 작업이 끝나는 일자를 꺼내온 뒤 구현이 완료된 기능을 큐에서 제거해준다.


스택과 큐에 대한 활용도에 대해 조금 더 고민을 해보아야 할 것 같다😭

전체 코드 :

import java.util.*;

public class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 0; i < progresses.length; i++)
            queue.add((int) (Math.ceil((100.0 - progresses[i]) / speeds[i])));

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

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

        return ans.stream().mapToInt(Integer::intValue).toArray();
    }
}
profile
개발이란 뭘까

0개의 댓글