https://programmers.co.kr/learn/courses/30/lessons/42583
import java.io.*;
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 1;
boolean[] bridge = new boolean[bridge_length]; // 다리위에 트럭이 있는지 없는지
int weight_sum = 0; // 다리위에 있는 트럭 무게 합
int idx = 1; // 대기 트럭 배열의 인덱스
Queue<Integer> queue = new LinkedList<>(); // 다리를 건너는 트럭리스트
// 첫번재 트럭 다리에 올리기
queue.add(truck_weights[0]);
bridge[bridge_length - 1] = true;
weight_sum += truck_weights[0];
while (!queue.isEmpty()) {
answer++;
// 다리 위 트럭 한칸씩 이동
if (bridge[0]) {
weight_sum -= queue.peek();
queue.poll();
}
for (int i = 0; i < bridge_length - 1; i++) {
bridge[i] = bridge[i + 1];
}
bridge[bridge_length - 1] = false;
// 대기 트럭 다리로 올리기
if (idx < truck_weights.length) {
int next = truck_weights[idx];
if (weight_sum + next <= weight) {
queue.add(next);
bridge[bridge_length - 1] = true;
weight_sum += next;
idx++;
}
}
}
return answer;
}
}
다리 위에 있는 트럭을 queue
에 넣고 다리 위에 트럭이 있는지 없는지 나타내는 bridge
배열을 통해 bridge[0]이 true 이면 queue
에서 제거해 줬다.
다리 위에 있는 트럭을 한 칸씩 앞으로 옮긴 후, 대기하던 트럭을 다리로 올렸다.
그리고 이 과정을 queue
가 빌 때까지 반복해 줬다.
내가 푸는 과정에서 헷갈리지 않기 위해 bridge 배열을 선언하고, 트럭들이 한 칸씩 앞으로 움직이는 방법을 사용했는데 다른 사람들의 풀이를 참고하니 다양한 방법이 있었다.