ALGORITHM/프로그래머스 | 백준 | 삼성 | 카카오

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

SZCODE 2020. 6. 18. 18:29

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

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 ��

programmers.co.kr

문제설명 :
진도가 적힌 progresses와 개발 속도가 적힌 배열 speeds가 주어질 때 각 배포마다 몇개의 기능이 배포되는지 구하기
진도가 100%일 때 서비스에 반영할 수 있다.
뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발 될 수 있지만 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포된다.
진도율이 95%인 작업의 개발 속도가 4%라면 배포는 2일 뒤에 이루어진다.

문제풀이 : 
100- 진도를 하고 나온 수를 개발속도로 나누면 며칠 뒤에 배포하는지 알 수 있다.
주의할 점은 나머지가 있을 떄는 하루 더 늘려줘야한다.

몰랐던 점:
처음에 정렬을 해서 풀었는데 그게 아니라 순서대로 처리해줘야한다.
반복하면서 다음 인덱스로 가고 싶을 때 day를 갱신하면 다음 차례로 가서 답을 구할 수 있다.
import java.util.ArrayList;
import java.util.Arrays;

class Solution {
    public  int[] solution(int[] progresses, int[] speeds) {
        int[] arr = new int[progresses.length];
        ArrayList list = new ArrayList();
        
        for (int i = 0; i < progresses.length; i++) {
			progresses[i] = 100-progresses[i];
			arr[i] = progresses[i]/speeds[i];
		
			if(progresses[i]%speeds[i]!=0) {
				arr[i] = (progresses[i]/speeds[i])+1;
			}
		}
        
        int cnt = 1;
        int day = arr[0];
        
        for (int i = 1; i < arr.length; i++) {
			if(day>= arr[i]) {
				cnt++;
			}else {
				list.add(cnt);
				day = arr[i];
				cnt = 1;
			}
		}
        
        list.add(cnt);
        int[] answer = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
			answer[i] = (int) list.get(i);
		}
        
        return answer;
    }

}