[Java 큐] 프로그래머스 - 기능개발

gonudayo·2021년 8월 17일
0
post-custom-banner

큐 뿐만 아니라 리스트 활용을 배울수 있었다.

풀이

  1. progresses 배열을 큐에 넣는다.
  2. 하루지날때 마다 제일 앞에 있는 큐에 속도 * 날짜를 더한 값을 비교하여 배포가 가능한지 확인.
    2-1. 배포가 가능한 경우 큐에서 해당 작업을 제거한후, 카운트.
    2-2. 배포가 불가능한 경우 다음날로.
  3. List 형태로 저장된 카운트 값을 answer 배열로 옮긴후 리턴.

전체코드

import java.util.Queue;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
	Queue<Integer> Q = new LinkedList<Integer>();
        List<Integer> temp = new ArrayList<Integer>();
        int i;
        int date = 0;
        int cnt = 0;
        
        for(i = 0; i < progresses.length; i++) {
            Q.add(progresses[i]);
        }
        
        
        i = 0;
        while(!Q.isEmpty()) {
            if(Q.peek() + (speeds[i] * date) >= 100) {
                Q.remove();
                i++;
                cnt++;
            }
            else {
                if(cnt != 0) {
                    temp.add(cnt);
                }
                cnt = 0;
                date++;
            }
        }
        temp.add(cnt);
        
        int[] answer = new int[temp.size()];

	    for (i = 0; i < answer.length; i++) {
		    answer[i] = temp.get(i);
	    }
        
        return answer;
    }
}

하루에 배포할수 있는 작업수 배열

while(!Q.isEmpty()) {

	if(Q.peek() + (speeds[i] * date) >= 100) {
		Q.remove();
		i++;
		cnt++;
	}
    
	else {
		if(cnt != 0) {
			temp.add(cnt);
		}
    
		cnt = 0;
		date++;
	}
}
temp.add(cnt);
  • 먼저 큐가 빌때까지 반복한다.

  • 큐 맨 앞에 있는 작업 진도율 + (작업 속도 * 지난 일 수) 을 하면 현재 진도율을 알수 있다.
    그 값이 100이 넘어 작업이 완료되었다면, 큐 맨 앞에 있는 값을 지운다.
    해당 날에 끝낼 수 있는 작업을 카운트하기 위해 cnt++ 한다.
    날짜는 그대로인 상태로 if문을 돈다.
    큐 맨 앞의 작업이 끝났으면 똑같이 remove()cnt++를 하며 또 다시 반복.

  • 큐 맨 앞의 작업이 끝나지 않았을 경우 지금까지 카운트한 cnt 값을 List에 넣는다.
    날짜를 다음날로 이동한다.

  • 마지막 작업이 끝나면 큐가 비어 while문이 끝나므로 temp.add(cnt);를 해준다.

List to Array

int[] answer = new int[temp.size()];

for (i = 0; i < answer.length; i++) {
	answer[i] = temp.get(i);
}

return answer;

answer 배열을 temp List 사이즈 만큼 선언한다.
for문으로 answer배열에 List 값을 넣는다.

profile
초신성 백엔드 개발자
post-custom-banner

1개의 댓글

comment-user-thumbnail
2021년 8월 17일

오빵 멋있어용😍

답글 달기