ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스 - Stack] 기능개발
    Coding Test 2023. 6. 15. 23:31
    728x90

     

    import java.util.*;
    
    class Solution {
        public ArrayList<Integer> solution(int[] progresses, int[] speeds) {
        
            Stack<Integer> stack = new Stack<>();
            ArrayList<Integer> answer = new ArrayList<>();
            
            int idxMax = progresses.length - 1; // 스택에 배열을 맨 뒤부터 담기 위함
            
            // progresses를 stack에 담기
            for(int i = idxMax; i >= 0 ; i--) {
                stack.push(progresses[i]);
            }
            
            int maxDays = 0; // 가장 긴 일수
            for(int i = 0; i < progresses.length; i++) {
                // (int) -> Math.ceil의 반환값이 double이라서, (double) -> 소숫점까지 정확히 필요함
                // (double) 안 하면 테스트 케이스 6 실패...
                maxDays = Math.max(maxDays, (int)Math.ceil((double)(100 - progresses[i]) / speeds[i]));
            }
    
            for(int i = 0; i < maxDays; i++) {
                int count = 0; // answer에 저장할 return 값, 배포는 하루에 한 번만 가능하기 때문
                for(int j = stack.size() - 1; j >= 0; j--) {
                    // set(인덱스, 값) -> stack 인덱스에 해당되는 값을 변경해줌
                    stack.set(j, stack.elementAt(j)+speeds[idxMax-j]);
                    if(stack.peek() >= 100) { // peek(맨 위에 있는 값 확인)해서 100% 이상 달성되면
                        count++; // 카운트 올려주고
                        stack.pop(); // pop()으로 stack의 맨 위의 요소 제거
                    }
                }
                if(count > 0) { // 카운트 되었다면
                    answer.add(count); // answer에 저장
                }
            }
            return answer;
        }
    }
    728x90
    반응형
Designed by Tistory.