[프로그래머스] 프린터
https://programmers.co.kr/learn/courses/30/lessons/42587
문제풀이
- 현재 최대값을 다음값과 비교한다.
- 현재 최대값이 다음값보다 크거나 같으면 동시에 배포해야하므로 스택에서 꺼낸 후 1을 더해준다.
- 현재 최대값이 다음값보다 작다면 새롭게 배포해야 하므로 1을 push한 후 최대값을 변경한다.
- 반복
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Stack<Integer> releaseStack = new Stack();
int curMaxDay = 0;
int releaseDay = 0;
for (int i=0; i<progresses.length; i++) {
releaseDay = (int)Math.ceil((100 - progresses[i]) / (double)speeds[i]);
if (!releaseStack.isEmpty()) {
if (curMaxDay >= releaseDay) {
releaseStack.push(releaseStack.pop() + 1);
} else {
releaseStack.push(1);
curMaxDay = releaseDay;
}
} else {
releaseStack.push(1);
curMaxDay = releaseDay;
}
}
int[] answer = new int[releaseStack.size()];
for (int i=answer.length-1; i>=0; i--) {
answer[i] = releaseStack.pop();
}
return answer;
}
}
Comments powered by Disqus.