큐를 이용해서 간단하게 구현하는 문제인데 생각보다 오래걸렸다... 같은 유형의 문제만 풀다보니 생각이 틀에 갖혀서 유연하게 생각하지 못 한 것 같다.
import java.util.*;
class Solution {
class Truck {
int weight;
int entry;
Truck(int weight, int entry){
this.weight = weight;
this.entry = entry;
}
}
public int solution(int bridge_length, int weight, int[] truck_weights) {
Queue<Truck> waiting = new LinkedList<>();
Queue<Truck> bridge = new LinkedList<>();
for(int i = 0 ; i < truck_weights.length ; ++i){
waiting.offer(new Truck(truck_weights[i], 0));
}
int time = 0;
int totalWeight = 0;
while(!waiting.isEmpty() || !bridge.isEmpty()){
time++;
if(!bridge.isEmpty()) {
Truck t = bridge.peek();
if(time - t.entry >= bridge_length) {
totalWeight -= t.weight;
bridge.poll();
}
}
if(!waiting.isEmpty()) {
if(totalWeight + waiting.peek().weight <= weight) {
Truck t = waiting.poll();
totalWeight += t.weight;
bridge.offer(new Truck(t.weight, time));
}
}
}
return time;
}
}
풀이 너무 잘봤습니다. 감사합니다 :)
혹시
if(!bridge.isEmpty()) {} 이부분과
if(!waiting.isEmpty()) {} 이부분의 위치를 바꾸면 다른값이 나오는 이유를 알려주실 수 있을까요??
제 생각에는 똑같은걸로만 생각이 되는데 값이 다르게 나오네요 ㅠㅠ 고민하다가 댓글 남깁니다..