본문 바로가기

알고리즘

알고리즘 / [java] 기능개발 / 프로그래머스

알고리즘 / 기능 개발 / 프로그래머스

문제 : https://programmers.co.kr/learn/courses/30/lessons/42586

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
          // 배포 진행도
        int progressCount = 0;
          // 몇개의 기능이 배포되는지 담을 배열
        List<Integer> answer = new ArrayList<>();


        while (progresses.length - 1 >= progressCount) {
              // 하루 작업 진행
            work(progresses, speeds);
              // 배포할 기능이 있는지 확인
            int deployCount = deploy(progresses, progressCount);
              // 기능이 있다면 배포하고 진행도 업데이트
            if (deployCount > 0) {
                answer.add(deployCount);
                progressCount += deployCount;
            }
        }
          // list를 int[] 로 변환
        return toArray(answer);
    }

    private int[] toArray(List<Integer> nums) {
        int[] answer = new int[nums.size()];
        for (int i = 0; i < nums.size(); i++) {
            answer[i] = nums.get(i);
        }
        return answer;
    }

    private void work(int[] progresses, int[] speeds) {
        for (int i = 0; i < progresses.length; i++) {
            progresses[i] = progresses[i] + speeds[i];
        }
    }

    private int deploy(int[] progresses, int progressCount) {
        int count = 0;
        while (progresses[progressCount] >= 100) {
            count += 1;
            if (progressCount >= progresses.length - 1) {
                return count;
            }
            progressCount += 1;
        }
        return count;
    }
}
반응형