𝑪𝒐𝒅𝒊𝒏𝒈 𝑻𝒆𝒔𝒕
프로그래머스 - 기능 개발
기누
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를 이용할 수 있을 지 생각하며 풀었었다.