Home [프로그래머스] 프린터
Post
Cancel

[프로그래머스] 프린터

[프로그래머스] 프린터

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

문제풀이

  1. 현재 최대값을 다음값과 비교한다.
  2. 현재 최대값이 다음값보다 크거나 같으면 동시에 배포해야하므로 스택에서 꺼낸 후 1을 더해준다.
  3. 현재 최대값이 다음값보다 작다면 새롭게 배포해야 하므로 1을 push한 후 최대값을 변경한다.
  4. 반복
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;
    }
}
This post is licensed under CC BY 4.0 by the author.

Event Wrapper

코루틴 Job

Comments powered by Disqus.