프로그래머스 스택/큐 기능개발 [JAVA] - 22년 8월 10일

Denia·2022년 8월 10일
0

코딩테스트 준비

목록 보기
32/201

세상에는 나보다 뛰어난 사람이 너무 많다. 그들을 보고 배우되 절망하지 말고 나는 나대로 나아가야 한다.

package com.company;

import java.util.*;

public class Solution {
    static public void main(String[] args) {
        int[] progresses1 = {93, 30, 55};
        int[] speeds1 = {1, 30, 5};

        int[] progresses2 = {95, 90, 99, 99, 80, 99};
        int[] speeds2 = {1, 1, 1, 1, 1, 1};


        System.out.println(Arrays.toString(solution(progresses1, speeds1)));
        System.out.println(Arrays.toString(solution(progresses2, speeds2)));
    }

    static public Integer[] solution(int[] progresses, int[] speeds) {
        //answer를 Integer[] 로 설정한 이유 : answerList.toArray(answer) 를 쓰기 위해서
        Integer[] answer = {};
        //정답을 담아두기 위해서 List 생성
        List<Integer> answerList = new ArrayList<Integer>();
        //앞에서부터 처리해야 하므로 FIFO인 Queue 생성
        Queue<Integer> answerQueue = new LinkedList<>();
        //전체적인 처리과정을 알 수 있게 Index 변수 생성
        int progressIndex = 0;
        //총 몇개가 처리 되었는지 알 수 있게 Count 변수 생성
        int totalCount = 0;

        // progresses의 길이 만큼 전체 작업이 처리 되지 않았으면 계속해서 while 문을 돈다.
        while (totalCount != progresses.length) {
            //오늘 처리한 작업량을 계산할 변수
            int todayCompleteCount = 0;

            //기존에 사용했던 Queue 내용을 초기화
            answerQueue.clear();

            //progresses의 내용을 하루 하루 지남에 따라 업데이트 , Queue 에 넣어준다.
            for (int i = progressIndex; i < progresses.length; i++) {
                progresses[i] = progresses[i] + speeds[i];
                answerQueue.add(progresses[i]);
            }

            //Queue에 넣어준 데이터를 하나 하나 꺼내면서 값을 확인한다.
            while (!answerQueue.isEmpty()) {
                //작업량이 100 넘었으면 poll 해주고 오늘 작업량 + 1 , progressIndex 를 + 1 해준다.
                if(answerQueue.peek() >= 100){
                    answerQueue.poll(); // 완료된 작업은 꺼낸다.
                    todayCompleteCount++; // 오늘 작업량 + 1
                    progressIndex++; // progressIndex + 1
                }
                // 작업이 100프로가 아니면 break
                else{
                    break;
                }
            }

            //오늘 작업량이 0개가 아니면 answerList 에 추가해준다. , 전체 작업량도 내용으 업데이트
            if(todayCompleteCount != 0){
                answerList.add(todayCompleteCount); // answerList 에 내용 추가
                totalCount = totalCount + todayCompleteCount; // 전체 작업량도 내용을 업데이트
            }
        }

        // answerList 를 Array 로 만들어서 반환
        return answerList.toArray(answer);
    }
}

profile
HW -> FW -> Web

0개의 댓글