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

윤준혁·2024년 4월 12일

나의 풀이

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] date = new int[speeds.length];
        
        for (int i = 0; i < speeds.length; i++) { // 1
            int count = 0;
            int value = progresses[i];
            while (true) {
                if (value + speeds[i] < 100) {
                    count++;
                    value += speeds[i];
                } else {
                    count++;
                    date[i] = count;
                    break;
                }
            }
        }
        
        ArrayList<Integer> list = new ArrayList<>();
        
        int current = date[0]; // 2
        int sum = 1;
        
        for (int i = 1; i < date.length; i++) { // 3
            if (current >= date[i]) {
                sum++;
            } else {
                list.add(sum);
                current = date[i];
                sum = 1;
            }
        }
        
        list.add(sum); // 4
        
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}

과정

  1. progresses와 speeds를 비교하여 진도율이 100이 되려면 며칠이 걸리는지 계산해서 date에 삽입
  2. 현재를 date[0]로 지정, 한 번에 배포할 sum을 1로 지정
  3. current가 date[i]보다 크거나 같으면 sum을 증가, 아니면 list에 넣어주고, currnet를 date[i]로 바꿔주고, sum을 1로 초기화
  4. 마지막에 추가가 안된 sum을 list에 추가

다른 사람 풀이

import java.util.ArrayList;
import java.util.Arrays;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] dayOfend = new int[100];
        int day = -1;
        for(int i=0; i<progresses.length; i++) {
            while(progresses[i] + (day*speeds[i]) < 100) {
                day++;
            }
            dayOfend[day]++;
        }
        return Arrays.stream(dayOfend).filter(i -> i!=0).toArray();
    }
}

0개의 댓글