Post

[프로그래머스/LV2] 기능개발 - 배열(Java)

[programmers-lv2] 기능개발

🙋‍♂️ 들어가며

이 문제를 보니 완료일자 배열을 만들고, 기준일을 갱신하며 풀 수 있는 문제였다



✅ O(N)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        
        // 1. 완료날짜 배열 생성
        int N = speeds.length;
        int[] arr = new int[N];
        
        for (int i = 0; i < N; i++) {
            int diff = 100 - progresses[i];
            int cur_val = (int) Math.ceil((double) diff / speeds[i] );
            arr[i] = cur_val;
        }
        
        // 2. 계산, 첫 값은 대입하고 시작
        // 그리고 기준 완료일 설정
        int[] answer = new int[100];
        int idx = 0;
        answer[idx]++;
        int base_end_day = arr[idx];
        for (int i = 1; i < N; i++) {
            
            // 2-1. 기준완료일이 현재일자보다 빨리 끝냈거나 같다면 완료arr에 추가
            if (base_end_day >= arr[i]) answer[idx]++;
            
            // 2-2. 기준완료날짜보다 늦게 끝냈다면?
            else if (base_end_day < arr[i]) {
                idx++;
                answer[idx]++;
                base_end_day = arr[i];
            }
        }
        
        
        // 3. 결과값 반환
        int final_size = idx;
        int[] final_arr = new int[idx + 1];
        for (int i = 0; i < idx + 1; i++) {
            final_arr[i] = answer[i];
        }
        
        return final_arr;
    }
}
This post is licensed under CC BY 4.0 by the author.

Trending Tags

반갑습니다 무엇을 도와드릴까요?