solution 함수의 매개변수로 다리에 올라갈 수 있는 트럭 수 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭 별 무게 truck_weights가 주어질 때, 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return하는 solution 함수를 작성하는 문제이다.
큐 구조의 LinkedList를 사용하여 순서대로 트럭이 지나가도록 하고, 다리를 지난 트럭의 수가 모든 트럭의 수가 될 때까지 반복문을 돌렸다.
import java.util.LinkedList;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
LinkedList<Integer> list = new LinkedList<>();
for (int i = 0; i < truck_weights.length; i++) {
list.add(truck_weights[i]);
}
int[] bridge = new int[bridge_length];
// bridge_length크기를 가진 배열 생성
// 다리에는 최대 bridge_length대 올라갈 수 있음
int sec = 0; // 경과시간
int remove = 0; // 다리를 지난 트럭의 수
while(remove != truck_weights.length) { // 다리를 지난 트럭의 수가 트럭의 총 갯수와 같아질 때까지 while문을 돌기
sec++;
if (bridge[bridge.length - 1] != 0) {
remove++; // 다리의 끝에 트럭이 있다면 remove++
}
int sum = 0;
for (int i = bridge.length-1; i > 0; i--) {
bridge[i] = bridge[i-1];
sum += bridge[i];
}
if (list.size() > 0) {
if (sum + list.getFirst() > weight) {
// 올라갈 차례의 트럭과 다리 위의 트럭들의 무게가
// weight보다 크다면 트럭을 올리지 않음
bridge[0] = 0;
} else { // 트럭을 올릴 수 있는 무게라면 올리고 대기열에서 삭제
bridge[0] = list.getFirst();
list.removeFirst();
}
}
}
answer = sec;
return answer;
}
}