728x90
2023.07.11 - [Coding Test/programmers] - 다리를 지나는 트럭 (다리 큐, 대기 큐)
다리를 지나는 트럭 (다리 큐, 대기 큐)
from collections import deque def solution(bridge_length, weight, truck_weights): answer = 0 w=0 # 다리에 올라간 트럭들 무게 wq=deque(truck_weights) # 대기트럭 큐 bq=deque([0 for _ in range(bridge_length)]) # 다리 큐 time=0 while len(wq)
karla.tistory.com
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0; // 소요시간
// 다리 큐
Queue<Integer> bridge = new LinkedList<>();
for (int i=0; i<bridge_length; i++){
bridge.add(0);
}
// 대기 큐
Queue<Integer> waitTrucks = new LinkedList<>();
for (int i=0; i<truck_weights.length; i++){
waitTrucks.add(truck_weights[i]);
}
int bridgeWeight = 0; // 다리 무게
while(waitTrucks.size()>0){
bridgeWeight -= bridge.poll();
if (waitTrucks.size()>0 && bridgeWeight + waitTrucks.peek() <= weight){ // 견딜수 있는 무게
int truckWeight = waitTrucks.poll();
bridge.add(truckWeight);
bridgeWeight+=truckWeight;
}
else{
bridge.add(0);
}
answer++;
}
while(bridgeWeight>0){
bridgeWeight-=bridge.poll();
answer++;
}
return answer;
}
}
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0; // 소요시간
Queue<Integer> bridge = new LinkedList<>();
for (int i=0; i<bridge_length; i++){
bridge.add(0);
}
int bridgeWeight = 0; // 다리 무게
int truckIdx = 0; // 대기중인 트럭 인덱스
while(truckIdx < truck_weights.length){
bridgeWeight -= bridge.poll();
int truckWeight = truck_weights[truckIdx];
if (bridgeWeight+truckWeight <= weight){ // 견딜수 있는 무게
bridge.add(truckWeight);
bridgeWeight+=truckWeight;
truckIdx++;
}
else{
bridge.add(0);
}
answer++;
}
while(bridgeWeight>0){
bridgeWeight-=bridge.poll();
answer++;
}
return answer;
}
}
728x90