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

헛헛한꿔녀니·2023년 11월 17일

코딩 테스트

목록 보기
4/10

📚 문제

이미지를 클릭하시면 문제 링크로 연결됩니다.


📝 문제 이해

  • 첫 번째 작업이 뒷 작업보다 늦게 끝난다면 배포일에 여러가지 작업을 같이 배포할 수 있다.

💡 문제 풀이

  • 배포까지 남은 일수를 배열에 넣고 대소비교를 해 동시에 배포할 수 있는 작업의 개수를 세어준다.

💻 소스 코드

import java.util.*;

// 2일차 (큐) - 프로그래머스 기능 개발
public class day02Prog42586 {
    public static int[] solution(int[] progresses, int[] speeds) {
        int[] days = new int[progresses.length];

        // 배포까지 남은 일수를 days 배열에 넣어준다.
        for (int i = 0; i < days.length; i++) {
            if((100 - progresses[i]) % speeds[i] == 0){
                days[i] = (100 - progresses[i]) / speeds[i];
            } else {
                days[i] = (100 - progresses[i]) / speeds[i] + 1;
            }
        }   // days = {7, 3, 9} days = {5, 10, 1, 1, 20, 1}

        ArrayList<Integer> list = new ArrayList<>();

        int x = days[0];    // 첫 번째 작업의 잔여일수
        int cnt = 1;

        for (int i = 1; i < progresses.length; i++) {
            if(x >= days[i]){
                cnt++;
            } else {
                list.add(cnt);  // 배포되는 작업의 개수를 배열에 저장
                cnt = 1;        // 초기화
                x = days[i];    // i-1 번째 작업의 잔여일수
            }
        }

        list.add(cnt);

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

        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        System.out.println(Arrays.toString(answer));
        return answer;
    }

    public static void main(String[] args) {
        int[] prog1 = {93, 30, 55};
        int[] spds1 = {1, 30, 5};
        solution(prog1, spds1);

        int[] prog2 = {95, 90, 99, 99, 80, 99};
        int[] spds2 = {1, 1, 1, 1, 1, 1};
        solution(prog2, spds2);

    }
}

0개의 댓글