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

seb Incode·2023년 1월 4일
0
post-thumbnail

문제설명



문제접근

큐로 사부작사부작..해보다가 내 풀이 방식은 큐가 필요 없기도 하고 큐로 풀 수가 없어서 단순 배열로 풀었다.
작업량 더하고-> 배포 가능 상태인지 검사하고 -> ...를 마지막 순서 작업을 배포할 때 까지 반복하는 게 핵심이었다.

다 풀고 나서 생각해보니까 ArrayList는 원소를 삭제할 경우 알아서 빈자리를 땡겨주기 때문에 걍 ArrayList에서 배포 가능한 원소를 삭제해가며 진행했어도 괜찮았을 것 같다. 그럼 굳이 변수 idx를 사용하지 않아도 괜찮았겠지...?

소스코드

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        ArrayList<Integer> answer = new ArrayList<>();      //답의 개수를 모르니까 ArrayList로 선언
        int[] answer2;  //최종 리턴할 answer 리턴 타입
        int idx = 0;    //가장 앞에 있는 기능의 인덱스
        do {
            for(int i=0;i<progresses.length;i++){
                progresses[i] += speeds[i];     //각 기능에 개발속도 더하기
            }
            
            int cnt = 0;    //배포 가능한 기능의 개수
            while(progresses[idx] >= 100){
                    cnt++;      //배포 기능 개수 +1
                    idx++;      //가장 앞에 있는 기능 인덱스 +1
                    if(idx >= progresses.length){       //인덱스 범위를 벗어났다면 모든 기능이 배포된 것이므로
                        break;      //종료
                    }
            }
            
           if(cnt > 0){     //배포 가능한 기능(들)이 있으면
               answer.add(cnt);     //배고 가능한 기능 개수 저장
               cnt = 0;        // 초기화
           }
            
        }while(idx < progresses.length);        //모든 기능들을 배포할 때 까지 반복
        
        answer2 = new int[answer.size()];       //ArrayList -> Array로 변한하기 위해
        
        for(int i=0;i<answer.size();i++){       //최종 리턴 값 Array에 담기
            answer2[i] = answer.get(i);
        }
        
        return answer2;
    }
}

0개의 댓글