[Java][프로그래머스] Lv.2 - 기능 개발

배수연·2024년 8월 1일

algorithm

목록 보기
41/45

🔗 프로그래머스 Lv.2 - 기능 개발

문제

알고리즘 분류

  • 스택/큐

풀이

1. 요소 별 개발 소요일 계산

  • Lv.1 - 같은 숫자는 싫어 문제와 마찬가지로, 스택/큐 분류이긴 하나 사용하지 않고 대신 ArrayList에 저장하였다.
  • 별도의 배열 arr를 만들어 각 기능마다 필요한 개발 소요일을 저장했다.
        int[] arr = new int[progresses.length];
        for(int i = 0 ;i<progresses.length; i++){
            int spear = 100 - progresses[i];
            if (spear % speeds[i] == 0){
                arr[i] = spear / speeds[i];              
            } else
                arr[i] = spear / speeds[i] +1;
        }

2. 기능 개발에 걸리는 일 수와 기능 개수 구하기

  • 먼저 첫번째 요소를 기준 요소(n)으로 지정하고, 배열을 돌면서 현재 요소가 기준 요소보다 적거나 같으면 count를 증가시킨다.
  • 현재 요소가 기준 요소보다 많으면 list에 count를 저장하고 초기화한다. 기준 요소를 현재 요소로 초기화한다. (n = arr[i])
  • 마지막 요소를 포함하는 count는 저장되지 않으므로, 반복문이 끝난 후 list에 count를 추가한다.
		int n = arr[0];
        int count = 1;
        ArrayList<Integer> list = new ArrayList<>();

        for(int i = 1; i<arr.length; i++){
            if(arr[i] <= n){
                count++;
            } else {
                list.add(count);
                n = arr[i];
                count = 1;
            }
        }
        list.add(count);
        return list;

전체 코드

import java.util.*;
class Solution {
    public ArrayList<Integer> solution(int[] progresses, int[] speeds) {
        int[] arr = new int[progresses.length];
        for(int i = 0 ;i<progresses.length; i++){
            int spear = 100 - progresses[i];
            if (spear % speeds[i] == 0){
                arr[i] = spear / speeds[i];              
            } else
                arr[i] = spear / speeds[i] +1;
        }
        int n = arr[0];
        int count = 1;
        ArrayList<Integer> list = new ArrayList<>();

        for(int i = 1; i<arr.length; i++){
            if(arr[i] <= n){
                count++;
            } else {
                list.add(count);
                n = arr[i];
                count = 1;
            }
        }
        list.add(count);
        return list;
    }
}

사실 90.9점까지는 풀었는데, 2번과 11번 테스트케이스에서 실패하고 질문게시판의 반례를 찾아봤다. 입력값 [90, 90], [10, 9] 출력값 [1, 1]인데 내 결괏값은 자꾸 [2]가 나왔다. 알고보니 풀이 1에서 arr에 개발에 필요한 소요일수를 저장하면서 계산식에 %대신 /를 잘못 작성했더라 .. 돌이켜보니 Math.ceil()함수를 썼으면 간단했을 듯

0개의 댓글