https://programmers.co.kr/learn/courses/30/lessons/42586
📒 문제
📒 제한 사항
🌻 코드(스택 사용 x)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int cnt = 1;
int[] day = new int[progresses.length];
for(int i = 0 ;i<progresses.length;i++){
if((100-progresses[i])%speeds[i]>0) day[i]=(100-progresses[i])/speeds[i]+1;
else day[i] = (100-progresses[i])/speeds[i];
}
List<Integer> list = new ArrayList<>();
for(int i = 0;i<day.length; i+=cnt ) {
cnt = 1;
for(int k =i+1;k<day.length;k++) {
if (day[i] >= day[k]) {
cnt++;
}
else if(day[i]<day[k]) break;
}
list.add(cnt);
}
int answer[] = new int[list.size()];
for(int i = 0;i<list.size();i++){
answer[i]= list.get(i);
}
return answer;
}
}
🌻 코드(스택 사용 O)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Stack;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Stack <Integer> day = new Stack();
for(int i = progresses.length-1 ;i>=0;i--){
if((100-progresses[i])%speeds[i]>0) day.push((100-progresses[i])/speeds[i]+1);
else day.push((100-progresses[i])/speeds[i]) ;
}
List<Integer> list = new ArrayList<>();
while(!day.isEmpty()){
int cnt = 1;
int first = day.pop();
while (!day.isEmpty() && first>=day.peek()){
day.pop();
cnt++;
}
list.add(cnt);
}
int answer[] = new int[list.size()];
for(int i = 0;i<list.size();i++){
answer[i]= list.get(i);
}
return answer;
}
}
💡 정리하기
👉 스택문제이지만 처음에는 스택을 사용하지않고 리스트로 풀었다. 스택또한 원리는 같아서 잘 활용할 수 있었다. 처음에 개발기간 값을 구하고 비교하면서 배포하는 기능의 수(cnt)를 증가시켜준다.