알고리즘 문제 풀이를 블로그에 올리는 이유는 풀이, 코드를 기록하기 위함이니
앞으로 문제를 다 긁어오기보다 링크만 두고 풀이가 잘 보이도록 포스팅 할 예정입니다!
이 문제는 bridge_legth만큼 트럭을 다리에 올리되, 트럭 무게의 합이 weight를 넘지 않게 조절하면서
모든 트럭이 다리를 지나는데 걸리는 시간을 구하는 문제이다.
이 문제도 문제 이해가 다소 어려웠는데(또르륽💧)
입출력 예로 제시된 2, 10, [7,4,5,6]을 보자
다리의 길이는 2, 고로 다리 위의 자리는 _, _ 두 개 이다.
1초 : _,7
2초 : 7,_	=> 무게 초과로 다음 트럭이 올라오지 못함
3초 : _,4
4초 : 4,5
5초 : 5,_	=> 무게 초과로 다음 트럭이 올라오지 못함
6초 : _,6
--------------------------대기 트럭 0, 이후는 다리에서 트럭을 빼는 과정--------------------------
7초 : 6,_
8초 : _,_	=> 모든 트럭이 다리를 지남
총 8초가 걸렸기 때문에 return 값은 8이 된다.import java.util.LinkedList;
import java.util.Queue;
public class Solution {
    // 큐 안 값의 sum을 구해주는 메소드
    static int queueSum(Queue<Integer> queue) {
        int sum = 0;
        for(int n : queue) {
            sum += n;
        }
        return sum;
    }
    public static int solution(int bridge_length, int weight, int[] truck_weights) {
        Queue<Integer> queue = new LinkedList<>();
        int size = queue.size();
        int answer = 0;
        for(int truck : truck_weights) {
        
            // truck 값 넣을 때까지 반복
            while(true) {
                if(queue.isEmpty()){
                    queue.add(truck);
                    answer++;
                    break;  // truck 값을 넣어주고 나서는 break
                } else if(queue.size() == bridge_length) {
                    queue.poll();
                } else {
                    if(queueSum(queue) + truck <= weight) {
                        queue.add(truck);
                        answer++;
                        break;  // truck 값을 넣어주고 나서는 break
                    } else {  // 무게가 초과되어 다음 truck 못 들어올 시
                        queue.add(0);
                        answer++;
                    }
                }
            }
        }
        return answer + bridge_length;  // 마지막에 들어있는 값 다 빼서 큐를 비울 때 고려 + bridge_length
    }
}