코딩테스트 연습 - 기능개발 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는
programmers.co.kr
풀이)
알고리즘)
각 기능들의 진행률에 스피드만큼 값을 올린다.(진행률이 100보다 낮으면 스피드만큼 추가 100보다 커지면 100을 대입)
progress[k]의 진행률이 100이라면 k값과 count를 증가시킨 후 그 다음 기능의 진행률을 체크하며 배포가 가능한 만큼 반복한다.
반복 중 progress[k]가 100보다 작을 경우 count값을 list에 추가시킨후 count값을 0으로 초기화하고 루프를 종료한다.
k가 기능의 갯수가 될 때까지 반복한다.
코드)
import java.util.ArrayList;
class Solution {
public ArrayList<Integer> solution(int[] progresses, int[] speeds) {
ArrayList<Integer> list = new ArrayList<Integer>();
int[] answer = {};
int k = 0;
int count = 0;
while(k < progresses.length) // k는 k이전까지의 기능이 배포되었음을 의미함
{
if(progresses[k] == 100){ // k번째 기능이 배포 가능하다면
k++;
count++;
while(k <= progresses.length){ // 몇 번째 기능까지 배포가 가능한지 체크
if(k == progresses.length) // 마지막 기능의 배포만 남았을 경우
{
list.add(count);
break;
}
System.out.println(k);
if(progresses[k] != 100) // 다음 기능이 배포가 불가능하다면
{
list.add(count);
count = 0;
break;
}
k++;
count++;
}
}
for(int i = 0; i < progresses.length;i++) // 각 스피드만큼 작업 진행
{
if(progresses[i] < 100)
{
progresses[i] += speeds[i];
if(progresses[i] > 100)
progresses[i] = 100;
}
System.out.printf("%d ",progresses[i]);
}
System.out.println();
}
return list;
}
}