https://programmers.co.kr/learn/courses/30/lessons/42583
첫번째 다른사람 풀이 보면 모든 트럭을 1씩 움직이면서 계산하던데 그렇게하면 O(트럭수x다리길이)가 돼서 느리다.
(트럭무게, 도착시간)을 큐에 넣을 수 있을만큼 넣고 하나씩 빼면서 시간을 업데이트하는 식으로 하면 O(트럭수)에 가능하다. 큐가 다 차지 않아도 나올 수 있다는걸 간과해서 좀 삽질을 했다.
public int solution(int bridge_length, int weight, int[] truck_weights) {
int totalWeight = 0;
LinkedList<int[]> q = new LinkedList<int[]>();
int time = 1;
int i=0;
int[] p;
do {
// add
while (i < truck_weights.length && totalWeight + truck_weights[i] <= weight) {
p = new int[] {truck_weights[i], time+bridge_length};
totalWeight += truck_weights[i];
q.offer(p);
++time;
++i;
if (q.peek()[1] <= time) // truck arrived before bridge is full
break;
}
// remove
p = q.poll();
totalWeight -= p[0];
time = p[1];
} while(!q.isEmpty() || i < truck_weights.length);
return time;
}