사용 알고리즘: 스택
사용 언어: java
import java.util.*;
class Solution {
static Stack<Integer> order = new Stack<>();
static Stack<Integer> workSpeed = new Stack<>();
public int[] solution(int[] progresses, int[] speeds) {
for(int i=speeds.length-1; i>=0; i--) {
order.push(progresses[i]);
workSpeed.push(speeds[i]);
}
int days = -1;
int cnt = 0; //한 번 배포할 때, 배포 가능한 갯수
ArrayList<Integer> answer = new ArrayList<>();
while(!order.isEmpty()) {
int firstOrder = order.pop();
int firstSpeed = workSpeed.pop();
if(days == -1) {
days = (100 - firstOrder) / firstSpeed;
if(days * firstSpeed < 100 - firstOrder)
days++;
cnt++;
}
else {
if(days * firstSpeed >= 100 - firstOrder)
cnt++;
else {
answer.add(cnt);
cnt = 0;
days = days = (100 - firstOrder) / firstSpeed;
if(days * firstSpeed < 100 - firstOrder)
days++;
cnt++;
}
}
}
answer.add(cnt);
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
좀 더 깔꼼한 코드 못 만드나 흠..
그리고 어떤 알고리즘으로 풀어야 하는지 안 나와 있었으면 stack을 사용할 아이디어를 낼 수 있었을지 모르겠음..
'알고리즘 > 프로그래머스' 카테고리의 다른 글
부모의 형질을 모두 가지는 대장균 찾기 - (0) | 2024.09.02 |
---|---|
모의고사 (0) | 2024.08.30 |
상담원 인원 **** (0) | 2024.08.27 |
n + 1 카드게임 *(후우..) (0) | 2024.08.23 |
무인도 여행 (0) | 2024.08.20 |