반응형
문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
제한 사항
작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.- 작업 진도는 100 미만의 자연수입니다.
- 작업 속도는 100 이하의 자연수입니다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
입출력 예
progresses speeds return
[93, 30, 55] | [1, 30, 5] | [2, 1] |
[95, 90, 99, 99, 80, 99] | [1, 1, 1, 1, 1, 1] | [1, 3, 2] |
일단 나는 데이터를 작업이 끝나기까지 필요한 시간으로 계산을 해두고 풀었다
100을 채우면 일이 끝나니 100에서 progresses를 빼준후 그 값들을 speeds로 나누어주었다
그다음은 deque를 사용했는데 이유는 peekFirst를 사용해야 했기 때문이다
import java.util.ArrayDeque;
public class PRO_CT_20 {
public static int[] solution(int[] progresses, int[] speeds) {
int[] arr =new int[progresses.length];
ArrayDeque<Integer> deque = new ArrayDeque<>();
ArrayDeque<Integer> score = new ArrayDeque<>();
//데이터 계산해서 새롭게 만들기
for(int i=0;i<progresses.length;i++){
arr[i]=(int)Math.ceil(((double) 100-progresses[i])/(double)speeds[i]);
}
for(int i=0;i<arr.length;i++){
if(i==0) deque.addLast(arr[i]); //처음 데이터는 무조건 넣어주고
else{
if(arr[i]<=deque.peekFirst()){ //peekFirst보다 값이 작다면
deque.addLast(arr[i]); //데큐에 계속 값을 넣어주고
if(i==arr.length-1)score.addLast(deque.size()); //마지막 값일때 처리
}else{ //크다면
score.addLast(deque.size()); //결과를 저장하는 score에 현재 데큐의 사이즈를 넣어줌
deque.clear();//일이 끝났으니 클리어 해주고
deque.addLast(arr[i]); //현재의 값을 데큐에 넣어줌
if(i==arr.length-1)score.addLast(deque.size());//마지막 값일때 처리
}
}
}
//값을 담을 배열을 만들어주고
int[] result =new int[score.size()];
//하나씩 배열에 담아줌
for(int i=0;i<result.length;i++){
result[i]=score.pollFirst();
System.out.println(result[i]);
}
return result;
}
public static void main(String[] args) {
int[] progresses={95, 90, 99, 99, 80, 99};
int[] speeds={1, 1, 1, 1,1};
System.out.println(solution(progresses,speeds));
}
}
마지막에 결과배열에 값을 하나씩 담아줄 때 조건문의 조건을 score.size()로 하면 안 된다 왜냐면 값을 담을 때 poll 하기 때문에
사이즈가 계속 변하기 때문!!
거의 처음 코테풀었을때 실패했던 문제였는데 지금은 가볍게 푸는 거 보니 코테공부 헛되게 하진 않았나 보다 ㅎㅎ
통과!!
반응형
'알고리즘🤮 > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 LEVEL2: 다리를 지나는 트럭 (0) | 2023.02.08 |
---|---|
[JAVA] 프로그래머스 LEVEL2: 가장 큰 수 (0) | 2023.02.07 |
[JAVA] 프로그래머스 LEVEL2: 두 큐 합 같게 만들기 (0) | 2023.01.26 |
[JAVA] 프로그래머스 LEVEL2: 괄호 회전하기 (0) | 2023.01.25 |
[JAVA] 프로그래머스 LEVEL2: 주식가격 (0) | 2023.01.18 |