티스토리 뷰

728x90

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

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr


[ 나의 풀이 ]

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        List<Integer> answer = new ArrayList<>();
        int count = 0;
        int startIndex = 0;
        while (startIndex < progresses.length) {
            while (progresses[startIndex] < 100) {
                for(int i = startIndex; i < progresses.length; i++) {
                    progresses[i] = progresses[i] + speeds[i];
                }
            }
            count = countComp(startIndex, progresses);
            startIndex += count;
            answer.add(new Integer(count));
        }
        return answer.stream().mapToInt(Integer::intValue).toArray();
    }

    private static int countComp(int startIndex, int[] progresses) {
        int count = 0;
        for(int i = startIndex; i < progresses.length; i++) {
            if(progresses[i] < 100) {
                break;
            }else {
                count ++;
            }
        }

        return count;
    }
}

[ 카운트를 간단화 한 해설 ]

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] dayOfend = new int[100];
        int day = 0;
        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();
    }

}

[ 큐를 이용한 한 해설 ]

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        Queue<Integer> q = new LinkedList<>();
        List<Integer> answerList = new ArrayList<>();
        
        for(int i = 0; i < speeds.length; i++) {
            double remain = (100 - progresses[i]) / (double) speeds[i];
            int date = (int) Math.ceil(remain);
            
            if(!q.isEmpty() && q.peek() < date) {
                answerList.add(q.size());
                q.clear();
            }
            
            q.offer(date);
        }
        
        answerList.add(q.size());
        
        return answerList.stream().mapToInt(Integer::intValue).toArray();
    }

}
728x90

'코딩테스트' 카테고리의 다른 글

[프로그래머스] 다리를 지나는 트럭  (0) 2022.06.08
[프로그래머스] 프린터  (0) 2022.04.27
[프로그래머스] 베스트앨범  (0) 2022.04.19
[프로그래머스] 위장  (0) 2022.04.01
[LeetCode] Valid Palindrome  (0) 2022.03.31
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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