알고리즘
[프로그래머스] 다리를 지나는 트럭
greenkang
2022. 8. 8. 22:50
[풀이방법]
1. 대기중인 트럭이 순서대로 들어있는 큐 wait 생성 = 대기중인 트럭
2. 다리의 길이만큼 0이 들어있는 큐 bridge 생성 = 다리위 트럭
3. 다리위의 트럭이 모두 나갈 때까지 다음을 반복
3-1) 시간++
3-2) 다리위의 트럭을 하나 빠져나가게함 (만약 트럭이 없다면 0이 빠져나감)
-> 현재 다리위 트럭무게 = 다리위의 트럭무게 - 빠져나간 트럭 무게
3-3) 대기중인 트럭이 존재할 경우 트럭을 더 올릴 수 있으면 다음 트럭을, 아니면 0을 추가
-> 현재 다리위 트럭무게 = 다리위의 트럭무게 + 올린 트럭 무게
[풀이코드_Java]
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
Queue<Integer> wait = new LinkedList<>(); // 대기트럭
for (int truck: truck_weights) {
wait.add(truck);
}
Queue<Integer> bridge = new LinkedList<>(); // 다리 위 트럭
for (int i = 0; i < bridge_length; i++) {
bridge.add(0);
}
int time = 0, totWeight = 0;
while (!bridge.isEmpty()) {
time++;
int out = bridge.poll(); // 다리를 빠져나감 (out)
totWeight -= out;
if (!wait.isEmpty()) { // 다리에 올라감 (in)
int in = 0; // default값 0으로 설정
if ( (totWeight + wait.peek()) <= weight )
in = wait.poll(); // 더 올릴 수 있으면 올림
bridge.add(in);
totWeight += in;
}
}
return time;
}
}