기능개발
https://programmers.co.kr/learn/courses/30/lessons/42586
기존에 원시적으로 풀었던 방법이 있더라
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] answer = {};
ArrayList<Integer> prog = new ArrayList();
ArrayList<Integer> time = new ArrayList();
for(int i=0; i<progresses.length; i++){
prog.add(progresses[i]);
time.add(speeds[i]);
}
ArrayList<Integer> result = new ArrayList();
while(prog.size()>0){
for(int i=0; i<prog.size(); i++){
prog.set(i, prog.get(i)+time.get(i));
}
int cnt = 0;
for(int i=0; i<prog.size(); i++){
if(i==0 && prog.get(i) >= 100){
cnt++;
prog.remove(i);
time.remove(i);
i--;
}else if(cnt>0 && prog.get(i) < 100){
break;
}else if(cnt>0 && prog.get(i) >= 100){
cnt++;
prog.remove(i);
time.remove(i);
i--;
}
}
if(cnt>0){
result.add(cnt);
}
}
answer = new int[result.size()];
for(int i=0; i<result.size(); i++){
answer[i] = result.get(i);
}
return answer;
}
}
문제 자체가 스택/큐 문제이니까 스택을 활용해서 풀어보는걸로하자..!
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] answer = {};
Stack<Integer> stack = new Stack<>();
for(int i=progresses.length-1; i>=0; i--){
stack.push((100-progresses[i])/speeds[i] + ((100-progresses[i])%speeds[i]>0 ? 1 : 0));
}
ArrayList<Integer> list = new ArrayList<>();
while(!stack.isEmpty()){
int cnt = 0;
int n = stack.pop();
cnt++;
while(!stack.isEmpty() && n >= stack.peek()){
cnt++;
stack.pop();
}
list.add(cnt);
}
answer = new int[list.size()];
for(int i=0; i<answer.length; i++){
answer[i] = list.get(i);
}
return answer;
}
}
Last updated
Was this helpful?