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

노력하는 배짱이·2021년 1월 24일
0
post-thumbnail

문제(링크)

풀이

처음에 for문을 계속 돌리면서 진행율이 100이 되는것을 계속 체크해서 결과를 도출했으나 메모리 용량 초과라 뜨며 실패했다.

다시 규칙을 찾아보는데, 전체 진도 100에서 현재 작업진도(progresses)를 뺀 뒤 작업속도(speeds)로 나눈 몫을 이용하면 될 것 같아서 아래와 같이 소스를 짤 수 있었다.

큐를 이용하여 하나씩 꺼내면서 이전 값과 비교했을 때 작으면 이미 해당 작업은 진작에 끝난것이여서 count +1 해주면 되는 것이고, 크다면 새롭게 갯수를 새주면 된다.

소스

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {        
        Queue<Integer> q = new LinkedList<>();
        
        int len = speeds.length;
        for(int i=0; i<len; i++) {
            int num = 100 - progresses[i]; // 진도 100과의 차이
            int temp = 0;
            // 며칠 걸리는지 파악
            if(num % speeds[i] != 0 ){
                temp = num / speeds[i] + 1;
            }else {
                temp = num / speeds[i];
            }
            q.offer(temp);
        }
        
        ArrayList<Integer> result = new ArrayList<>();
        int count = 0;
        
        // 큐에서 첫번재 요소 미리 뺌
        int prev = q.poll();
        count += 1;
        
        while(!q.isEmpty()) {
            int a = q.poll();
            if(a <= prev) { // 이전 값보다 작으면 이미 완료된 상태니까 count + 1
                count += 1;
            }else { // 이전 값보다 크면 더 오래 걸린거니까 지금까지 갯수 샌거 넣고 새롭게 시작
                result.add(count);
                count = 1;
                prev = a;
            }            
            
        }
        result.add(count);
        
        int[] answer = new int[result.size()];
        for(int i=0; i<result.size(); i++) {
            answer[i] = result.get(i);
        }
        
        return answer;
    }
}

결과

0개의 댓글

Powered by GraphCDN, the GraphQL CDN