programmers.co.kr/learn/courses/30/lessons/42586
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Stack<Integer> stack=new Stack<>();
for(int i=progresses.length-1;i>=0;i--) {
float temp=(float)(100-progresses[i])/(float)speeds[i];
stack.add((int)Math.ceil(temp));
}
ArrayList<Integer> list=new ArrayList<>();
int tempSum=1;
int tempNum=stack.pop();
while(true) {
if(stack.isEmpty()) {
list.add(tempSum);
break;
}
if(stack.peek()<=tempNum) {
tempSum++;
stack.pop();
}
else {
list.add(tempSum);
tempSum=1;
tempNum=stack.pop();
}
}
int[] answer= new int[list.size()];
for(int i=0;i<list.size();i++) {
answer[i]=list.get(i);
}
return answer;
}
}
먼저 스택에 거꾸로 된 순서로 값을 저장할 건데요, 기능이 100%될 때까지 걸리는 일수를 저장할 겁니다.
이 때 Math.ceil을 이용해서 값을 올림해주어야 합니다.
tempNum이란 변수에 stack의 최상단 값을 저장합니다.
반복문을 이용해 tempNum보다 남은 일수가 큰 날이 나올 때까지 반복문을 실행하는데요, 남은 일수가 작거나 같은 날이 나오면 list에 값을 저장하고 새로운 값을 tempNum에 저장합니다.
이 때 tempSum이라는 변수를 이용해 tempNum보다 남은 일수가 큰 날이 나오는 경우 +1을 해줌으로써 출시되는 기능의 개수를 저장합니다.
'프로그래밍 문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 주식가격(JAVA) (0) | 2020.09.17 |
---|---|
[프로그래머스] 위장(JAVA) (0) | 2020.09.17 |
[프로그래머스] 베스트앨범(JAVA) (0) | 2020.09.10 |
[프로그래머스] 전화번호 목록(JAVA) (0) | 2020.09.03 |
[프로그래머스] 완주하지 못한 선수(JAVA) (0) | 2020.09.01 |