프로그래머스 lv2 기능개발

namkun·2022년 7월 10일
0

코딩테스트

목록 보기
15/79
post-custom-banner

문제 링크

기능 개발

풀이

import java.util.ArrayList;

class Solution {
 public int[] solution(int[] progresses, int[] speeds) {
        ArrayList<Integer> answer = new ArrayList<>();
        ArrayList<Integer> days = new ArrayList<>();

        for (int i = 0; i < progresses.length; i++) {
            int day = (100 - progresses[i]) / speeds[i];
            if ((100 - progresses[i]) % speeds[i] > 0) day += 1;
            days.add(day);
        }

        // init
        int standardDay = days.get(0);
        int deployCnt = 1;

        for (int i = 1; i < days.size(); i++) {
            if (days.get(i) <= standardDay) {
                deployCnt++;
            } else {
                answer.add(deployCnt);
                standardDay = days.get(i);
                deployCnt = 1;
            }
            
            // for Last
            if(i == days.size() - 1){
                answer.add(deployCnt);
            }
        }

        return answer.stream().mapToInt(Integer::intValue).toArray();
    }
}

소감

  • 애초에 문제에 스택/큐라고 적혀있길래 처음에는 스택으로 접근했다.
  • 풀다보니 '이거 그냥 for문으로도 풀겠는데...' 싶어서 그냥 for문으로 풀었다.
  • 유연한 사고를 가져보자..
  • 스트림은 왜 사용법을 맨날 까먹는걸까. 한번 각잡고 정리해야겠다.
  • 여기서 강제로 올림을 이렇게 처리했는데, Math.ceil이라는 함수를 통해서 처리할 수 있었다. 아는 만큼 사용할 수 있는 법..
    int day = (100 - progresses[i]) / speeds[i];		 -> double dayDouble = (100 - progresses[i]) / speeds[i];
    if ((100 - progresses[i]) % speeds[i] > 0) day += 1; -> int day = (int) Math.ceil(dayDouble);
profile
개발하는 중국학과 사람
post-custom-banner

0개의 댓글