본문 바로가기

Development/CodingTest

[Queue] 프로그래머스 level 2 기능개발 java 풀이

https://school.programmers.co.kr/learn/courses/30/lessons/42586?language=java#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

초기 문제 접근

  1. progresses 요소들을 queue 안에 넣고
  2. 순회하면서 speeds를 더해주고
  3. 100이 넘는 애들이 나오면 그때 count++하고 answer에 넣기

이런식으로 하려 했으나.. 그럼 speeds를 저장하는 queue도 따로 만들어줘야 하고, 여럿 문제가 생겨버렸다..

이후 문제 접근

  1. progresses를 순회하며, 기능 개발에 남은 일수를 Math.ceil 올림을 통해 계산하고
  2. queue 맨 앞에 있는 남은 일수를 꺼낸 다음에
  3. 뒤에 있는 기능들의 남은 일수보다 같거나 작은 애들 다 빼면서 count++

코드

import java.util.*;

class Solution {
    public ArrayList<Integer> solution(int[] progresses, int[] speeds) {
        ArrayList<Integer> answer = new ArrayList<Integer>();
        Queue<Integer> queue = new LinkedList<Integer>();

        for(int i=0; i<progresses.length; i++){
            queue.add((int)Math.ceil((100.0-progresses[i])/speeds[i]));
        }
        
        while(!queue.isEmpty()){
            int minDays = queue.poll();
            int count = 1;
            while(!queue.isEmpty() && queue.peek() <= minDays){
                queue.poll();
                count++;
            }
            answer.add(count);
        }

        return answer;
    }
}

참고 자료

https://mundol-colynn.tistory.com/126

 

[자바/java] 프로그래머스 - 기능개발(Level2 - Queue)

[자바/java] 프로그래머스 - 기능개발(Queue) https://school.programmers.co.kr/learn/courses/30/lessons/42586 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로

mundol-colynn.tistory.com