해당 알고리즘 자료는 제가 직접 푼 것도 있지만 다른 분들의 풀이과의 비교를 통해 더 나은 알고리즘을 공부하기 위해 정리한 것들입니다.
https://programmers.co.kr/learn/courses/30/lessons/42891
풀이 : 위치와 양을 저장한 Food class를 Queue에 넣은 뒤 시간 별로 체크해준다.
import java.util.*;
class Solution {
static class Food {
int id, t;
public Food(int id, int t) {
this.id = id;
this.t = t;
}
}
public int solution(int[] food_times, long k) {
LinkedList<Food> qu = new LinkedList<Food>();
int l = food_times.length;
for (int i = 0; i < food_times.length; i++) {
qu.add(new Food(i+1, food_times[i]));
}
long t = k;
while(!qu.isEmpty()) {
int s = qu.size();
int time = (int) (t / s);
t %= s;
if(time == 0) {
return qu.get((int)t).id;
}
long over = each(qu, time);
t += over;
}
return -1;
}
private static long each(LinkedList<Food> qu, int time) {
long over = 0;
for(Food f : qu) {
f.t -= time;
if(f.t < 0) over -= f.t;
}
qu.removeIf(f -> f.t <= 0);
return over;
}
}