본문 바로가기
알고리즘/프로그래머스

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

by 오이가지아빠 2021. 3. 23.

각 작업의 소요일자를 구한 후, 선작업 부터 같이 배포가능한 원소들을 뽑아서(소요일자가 자신보다 작은것)

배열에서 remove 시키는 방법으로 구현하였다.

배열에서 원소를 지워나가는 가장 안전한 방법은 iterator를 사용하는 것.

 

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {};
        List<Integer> temp = new ArrayList<>();
        List<Integer> tempAns = new ArrayList<>();

        // 각 작업이 배포될 수 있는 일자를 별도로 담아 놓는다.
        for (int i = 0; i < progresses.length; i++) {
            int progress = progresses[i];
            int speed = speeds[i];
            temp.add((int) Math.ceil((100-progress) / (double) speed));
        }

        while (temp.size() > 0) {
            int prev = temp.get(0);
            int d = 0;
            for(Iterator<Integer> iter = temp.iterator(); iter.hasNext();) {
                int now = iter.next();
                // 앞에서 부터 자신과 같이 배포 가능한 원소를 지워나가며 숫자를 별도로 담는다
                if(now <= prev) {
                    d++;
                    iter.remove();
                } else {
                    break;
                }
            }
            tempAns.add(d);
        }
        answer = new int[tempAns.size()];
        for (int i = 0; i < tempAns.size(); i++) {
            answer[i] = tempAns.get(i);
        }
        return answer;
    }
}

 

출처: 프로그래머스 코딩 테스트 연습, 
https://programmers.co.kr/learn/challenges
반응형

댓글