[프로그래머스] 기능 개발

urzi·2022년 3월 27일
0

PS

목록 보기
7/36

문제

https://programmers.co.kr/learn/courses/30/lessons/42586#qna

풀이

  1. answer array에 배포에 걸리는 일자를 각 인덱스 별로 담아준다.
  2. stack을 생성하고 answer를 반복하면서 앞에 일수보다 현재 일수가 더 크면 스택에 그대로 1을 담는다.
  3. 만약 앞에 일수보다 현재 일수가 작거나 같으면(같으면 같은날 배포되기 때문에) 기존 stack을 pop해서 +1을 해서 다시 담는다.
  4. stack을 array로 변환해서 return

코드

import java.util.Stack;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = new int[progresses.length];
        Stack<Integer> stack = new Stack<>();

		// 배포에 걸리는 일수를 answer에 담는다.
        for (int i = 0; i < progresses.length; i++) {

            int percent = 100 - progresses[i];
            int days = percent / speeds[i];
            int remainDays = percent % speeds[i];
            if (remainDays > 0) {
                days += 1;
            }
            answer[i] = days;
        }

		//answer를 반복하면서 위 풀이대로 stack에 담는다.
        int check = 0;
        for (int i = 0; i < answer.length; i++) {
            if (i == 0) {
                stack.push(1);
                check = answer[i];
            } else {
                if (check >= answer[i]) {
                    Integer pop = stack.pop();
                    stack.push(pop + 1);
                } else {
                    stack.push(1);
                    check = answer[i];
                }
            }
        }

		// stack을 array로 변환하여 return
        return stack.stream().mapToInt(Integer::intValue).toArray();
    }
}
profile
Back-end Developer

1개의 댓글

comment-user-thumbnail
2022년 3월 28일

잘했어요

답글 달기