𝑪𝒐𝒅𝒊𝒏𝒈 𝑻𝒆𝒔𝒕

프로그래머스 - 기능 개발

기누 2022. 2. 16. 02:32

# 문제

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

 

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

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

programmers.co.kr

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.

또, 각 기능의 개발 속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지 return 하도록 solution 함수를 완성하세요.

 

# 풀이 (자바)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;

 public int[] solution(int[] progresses, int[] speeds) {
	        int[] answerArr = null;
	        int count = 0;
	        int num = 0;
	        int index = 0;
	        Queue<Integer> queue = new LinkedList<>();
	        ArrayList<Integer> answer = new ArrayList<Integer>();
	        
	        for (int i = 0 ; i < progresses.length; i++) {
	        	queue.add(progresses[i]);
	        } // 모든 값을 queue 에 넣음 
	        while (!queue.isEmpty()) { // queue 가 빌 때 까지 
	        	if (queue.peek() + (num * speeds[index]) >= 100) { 
                // queue 의 첫번째 값 + while 문을 돈 횟수 * speed  >= 100? 
	        		queue.poll();  //넘는다면 queue 의 맨 위 값을 삭제 
	        		index++; // speeds 를 위한 인덱스 추가 
	        		count++; // 100 이 넘어서 지워준 queue 의 횟수를 카운트 
	        		if (queue.isEmpty()) {answer.add(count);} // 마지막 queue 를 없앴다면 
	        	}
	        	else if (count != 0) { 
	        		// count 가 0 이 아니고(지금 queue 이전에 지워준 queue 가 존재 AND
                    // 현재 peek 이 100 이 넘지 않으면 count를 어레이리스트에 추가) 
	        		answer.add(count);
	        		count = 0;	// 카운트 초기화 
	        	}
	        	else {num++;}	
	        }
	        answerArr = new int[answer.size()]; 
            // 메소드가 int[]를 리턴하니, 어레이리스트를 인트 배열로 변환  
	        for (int i = 0; i < answerArr.length; i++) {
	        	answerArr[i] = answer.get(i);	       
	        }
	        return answerArr;       
 }

 

# 한 줄 느낌

어레이리스트만 사용해서 풀면 쉽고 간결하게 풀릴 문제였지만, 저번 시간에 배웠던 Queue를 써서 풀어보도록 했다! Queue는 index를 구해 그 안의 값을 가져오거나, Queue 값 자체를 변경하는 것이 불가능하기 때문에 어떤 식으로 Queue를 이용할 수 있을 지 생각하며 풀었었다.