큐에 트럭을 추가할 수 있다면 트럭 무게를, 추가할 수 없다면 대신 0을 추가하는 과정을 반복한다. 큐에 있는 트럭의 무게 합이 0인 경우 반복을 종료한다.
(이때 트럭은 처음에 큐가 다 차지 않았을 때를 제외하고는 항상bridge_length
를 유지한다. 따라서 큐에 있는 트럭의 무게 합을bridge_weight
에 따로 저장해, 이 값이 0인 경우를 반복의 종료 조건으로 삼는다.)
bridge
)의 길이가 bridge_length
와 같다면, 맨 앞에 있는 원소를 뺀다.weight
을 넘지 않는다면 큐에 추가한다.bridge_weigth==0
)반복을 종료한다.import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
int index = 0;
Queue<Integer> bridge = new LinkedList<Integer>();
int bridge_weight = 0;
do{
if(bridge.size() == bridge_length){
int out_weight = bridge.poll();
bridge_weight -= out_weight;
}
if(truck_weights.length > index && truck_weights[index] + bridge_weight <= weight){
bridge.offer(truck_weights[index]);
bridge_weight += truck_weights[index];
index++;
}else{
bridge.offer(0);
}
answer += 1;
}while(bridge_weight != 0);
return answer;
}
}
from collections import deque
def solution(bridge_length, weight, truck_weights):
answer = 0
truck_weights = deque(truck_weights)
bridge = deque()
bridge_weight = 0
while True:
if len(bridge) == bridge_length:
out_weight = bridge.popleft()
bridge_weight -= out_weight
if truck_weights and truck_weights[0] + bridge_weight <= weight:
next_weight = truck_weights.popleft()
bridge.append(next_weight)
bridge_weight += next_weight
else:
bridge.append(0)
answer += 1
if bridge_weight == 0:
break
return answer