본문 바로가기
코딩테스트/프로그래머스 2단계

프로그래머스 2단계 - 기능개발(스택/큐)

by SICDev 2021. 9. 9.
반응형

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

 

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

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

programmers.co.kr

 

Stack 사용

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        
        List<Integer> countList = new ArrayList<>();
        Stack<Integer> stack = new Stack<>();
        List<Integer> answerList = new ArrayList<>();
        
        //100%까지 걸린 일자 구하기
        for(int i=0; i<progresses.length; i++){
            int count = 0;
            while(progresses[i] < 100){
                progresses[i] += speeds[i];
                count++;
            }
            countList.add(count);
        }
        
        //스택에 쌓기
        for(int i=countList.size()-1; i>=0; i--){
            stack.push(countList.get(i));
        }
        
        //하나씩 뽑아내기
        while(!stack.isEmpty()){
            int cnt = 0;
            int pop = stack.pop();
            cnt++;
            //현재 pop된 값과 다음 값 비교하기
            while(!stack.isEmpty() && stack.peek() <= pop){
                stack.pop();
                cnt++;
            }
            //리스트에 기능 갯수 넣기.
            answerList.add(cnt);
        }
        
        //정답 구하기
        int[] answer = new int[answerList.size()];
        for(int i=0; i<answer.length; i++){
            answer[i] = answerList.get(i);
        }
        
        return answer;
    }
}


 

Stack 미사용

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        
        List<Integer> countList = new ArrayList<>();
        List<Integer> answerList = new ArrayList<>();
        
        //100%까지 걸린 일자 구하기
        for(int i=0; i<progresses.length; i++){
            int count = 0;
            while(progresses[i] < 100){
                progresses[i] += speeds[i];
                count++;
            }
            countList.add(count);
        }
        
        //list의 remove를 이용해서 계산하기.
        while(countList.size() != 0){
            int cnt = 0;
            int top = countList.remove(0);
            cnt++;
            while(countList.size() != 0 && countList.get(0) <= top){
                countList.remove(0);
                cnt++;
            }
            answerList.add(cnt);
        }
        
        //정답 구하기
        int[] answer = new int[answerList.size()];
        for(int i=0; i<answer.length; i++){
            answer[i] = answerList.get(i);
        }
        
        return answer;

    }
}

 

반응형