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

박신희·2022년 9월 11일
0

[풀이] 프로그래머스

목록 보기
22/33
post-thumbnail

❗ 풀이 과정

  • 일단 걸리는 걸리는 날짜(시간)을 계산해서 p_days 배열에 저장
  • p_days 배열을 순차적으로 탐색해서 answer 배열에 저장
    - 여기서 나는, 순차적으로 탐색할 때, 전에 것만 비교해서 전의 걸린시간보다 크면 무조건 갱신하는 방식으로 구현했는데 그 전에 max으로 걸린시간과 비교해야 한다.
    예를 들어서, [5,3,4] 가 있다면 답은 [1] 이다. 5가 끝날때 3,4는 이미 다 끝나있기 때문이다. 전에 것만 비교했다면 계산한 답은 [2,1] 이였을 것이다. 그러면 NO!

🤜 풀이코드

import java.util.Arrays;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {

        int p_num = progresses.length;      // progress 개수 저장
        int [] p_days = new int [p_num];    // progress 별로 걸리는 날짜 저장
        
        for(int i=0;i<p_num;i++){
            int days=0;            
            if((100-progresses[i])%speeds[i]!=0) days = (100-progresses[i])/speeds[i]+1;
            else                                 days = (100-progresses[i])/speeds[i];
            p_days[i]=days;
        } // progress 별로 걸리는 days 계산해서 p_days[i]에 저장
        
        int[] answer = new int [p_num];
        int idx=0, l_day=0;
        for(int i=0;i<p_num;i++){
            if(i==0) {answer[idx++]=1; l_day=p_days[i];}
            else{
                if(p_days[i]>l_day) {answer[idx++]=1; l_day=p_days[i];}
                else                      answer[idx-1]+=1;
            }
        }
        
        return  Arrays.copyOfRange(answer,0,idx);
    }
}

💁‍ 배열을 자르는 방법

int [] arr = new int [N];
// 진짜 크기를 나타내는 idx를 따로 계산
return Arrays.copyOfRange(arr,0,idx);

프로그래머스에서는 반환값이 배열이라서, 일단 이렇게 잘라주고 있다.

profile
log my moments 'u')/

0개의 댓글