티스토리 뷰

programmers.co.kr/learn/courses/30/lessons/42586

1. 문제

2. 풀이

import java.util.*;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        Stack<List<Integer>> stack = new Stack<List<Integer>>();
        int prevMaxDay = 0;
        for (int i = 0; i < progresses.length; i++) {
             int progress = progresses[i];
             int speed = speeds[i];
             // j를 0 ~ 99까지 해보면서
             for (int j = 0; j < 100; j++) {
             	 // 현재 진행률과 속도 * j를 더한 것이 100이 넘으면
                 if ((progress + (speed * j)) >= 100) {
                     if (j > prevMaxDay) { // prevMaxDay가 j보다 작은 경우 
                     	 // 새로 리스트를 만들어서 걸리는 일자를 넣어주고
                         List<Integer> subList = new ArrayList<Integer>();
                         subList.add(j);
                         stack.push(subList);
                         prevMaxDay = j;
                     } else if (j <= prevMaxDay) { // prevMaxDay가 j보다 크거나 같은 경우
                         List<Integer> subList = stack.pop();
                         subList.add(j);
                         stack.push(subList);
                     }
                     break;
                 }
             }
        }
        int size = stack.size();
        int[] answer = new int[size];
        for (int i = size-1; i >= 0; i--) {
            answer[i] = stack.pop().size();
        }
        return answer;
    }
}

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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 30
글 보관함