프로그레스 배열이 주어지고 진행 속도 배열이 주어진다.
프로그레스가 100이 되면 배포할 수 있는데 , 순서에 따라 배포할 수 있기 때문에
앞의 프로그레스가 100이 되지 않으면 뒤의 프로그레스는 100이 되어보 배포될 수 없다.
그래서 앞에서부터 순서대로 기능이 완성되어 배포할 때 한번에 여러개가 동시에 배포될 수 있다.
매번 배포할 때마다 몇개의 완성된 기능이 배포되는지 반환
일단 하루가 지나면 프로그레스의 모든 기능들은 스피드만큼 프로그레스가 증가한다.
그리고 매일 프로그레스가 100이 넘었는지 확인해주고 넘었으면 다음 프로그레스도 함께 확인하고
다음 프로그레스가 100이 아닌 것을 확인했을 때, 그때까지 100이 넘어 배포해야할 프로그레스의 개수를 list에 넣는다.
for (int i = 0; i < speeds.length; i++) {
progresses[i] += speeds[i];
}
매일 모든 프로그레스가 스피드만큼 증가
if (progresses[j] >= 100) {
count++;
continue;
}
프로그레스가 100이 넘었는지 확인하고 넘었으면 배포할 개수 count를 증가시키고 다음 프로그레스도 확인한다.
카운트가 0 이 아니라면 ( 배포해야할 순서의 프로그레스가 100이 넘었다면 ) list에 count를 추가하고 다시 카운트를 0으로 초기화한다.
if (count != 0) {
answer.add(count);
count = 0;
}
전체풀이
public ArrayList<Integer> solution(int[] progresses, int[] speeds) {
ArrayList<Integer> answer = new ArrayList<Integer>();
int count = 0;
for (int j = 0; j < progresses.length; j++) {
if (progresses[j] >= 100) {
count++;
continue;
} else {
j--;
for (int i = 0; i < speeds.length; i++) {
progresses[i] += speeds[i];
}
}
if (count != 0) {
answer.add(count);
count = 0;
}
}
if (count != 0) {
answer.add(count);
}
return answer;
}
j를 감소시키는 이유는 프로그레스가 100이 넘지 않았는데 다음 프로그레스를 확인하면 안되기 때문에 다시 j를 감소시키고 하루가 지났다 가정하고 모든 프로그레스를 스피드만큼 증가시키고 재확인할 수 있게 해준다.
마지막 남은 프로그레스가 100이 되면 count를 증가시킨 후 continue로 빠져나와 list에 추가하지 못하기 때문에
for문을 빠져나온 후 한번더 list에 추가해준다.
'Java > Coding Test' 카테고리의 다른 글
카펫 문제 풀이 (0) | 2023.10.06 |
---|---|
올바른 괄호 문제 풀이 (1) | 2023.10.05 |
크레인 인형뽑기 게임 문제 풀이 (0) | 2023.10.04 |
로또의 최고 순위와 최저 순위 문제 풀이 (0) | 2023.10.04 |
다트 게임 문제 풀이 (0) | 2023.10.04 |