문제
풀이
import java.util.Stack;
public class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Stack<Task> stack = new Stack<>();
for (int i = 0; i < progresses.length; i++) {
int progresse = progresses[i];
int speed = speeds[i];
int day = 0;
while (progresse < 100) {
day++;
progresse += speed;
}
if (stack.isEmpty() || stack.peek().day < day) {
stack.push(new Task(day, 1));
} else {
Task now = stack.pop();
now.cnt++;
stack.push(now);
}
}
int[] answer = new int[stack.size()];
for (int i = answer.length - 1; i >= 0; i--) {
answer[i] = stack.pop().cnt;
}
return answer;
}
static class Task {
int cnt, day;
public Task(int day, int cnt) {
this.cnt = cnt;
this.day = day;
}
}
}
문제점 해결
먼저 100%까지 만들기 위해 while문을 돌린다.
if (stack.isEmpty() || stack.peek().day < day) {
stack.push(new Task(day, 1));
} else {
Task now = stack.pop();
now.cnt++;
stack.push(now);
}
stack이 비어있거나 stack.peek()보다 개발 일수가 오래 걸린다면 stack에 day(개발 일수), cnt(기능 수)객체를 만들어 push해준다.
만약 현재의 기능을 개발하는데 걸리는 시간보다 이미 stack에 저장되어 있는 바로 앞의 기능 개발 일수가 더 길다면 cnt를 증가시켜준다.