프로그래머스 - 기능개발

J-Keonho·2020년 9월 1일
0

해당 알고리즘 자료는 제가 직접 푼 것도 있지만 다른 분들의 풀이과의 비교를 통해 더 나은 알고리즘을 공부하기 위해 정리한 것들입니다.

프로그래머스 - 기능개발

https://programmers.co.kr/learn/courses/30/lessons/42586

풀이 1. (초급) - 필요한 일자 수를 계산하여 비교

import java.util.*;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        ArrayList <Integer> list = new ArrayList<Integer>();
		int cnt = 1;
		int sec = secCalc(progresses[0],speeds[0]);
		for (int i = 1; i < speeds.length; i++) {
			if (secCalc(progresses[i], speeds[i]) <= sec) cnt++;
			else {
				list.add(cnt);
				cnt = 1;
				sec = secCalc(progresses[i], speeds[i]);
			}
		}
		list.add(cnt);
		int [] ans = new int[list.size()];
		for (int i = 0; i < ans.length; i++) {
			ans[i] = list.get(i);
		}
        return ans;
    }
    
    private static int secCalc(int i, int j) {
		return (100-i)%j == 0 ? (100-i)/j : (100-i)/j + 1;
	}
}

풀이 2. (중급) - 스트림의 필터를 이용

import java.util.ArrayList;
import java.util.Arrays;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] dayOfend = new int[100]; // 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이 아닌 부분을 필터하여 배열로 변환
    }
}
profile
안녕하세요.

0개의 댓글