먼저 bridge 배열을 bridge 길이만큼 선언하고 큐에 트럭 무게 배열을 넣어주었다!
다리 위의 트럭들+다음트럭이 무게 한도에 못미치면 다음 트럭을 올리고, 무게 한도를 넘으면 다음 트럭 올리지 말고 다리 위 트럭들만 한칸씩 이동!
그 와중에 answer을 increment하여 초를 센다..
코드를 간결하게 하기 위해 함수도 두개 사용. 트럭을 한칸씩 이동시키는 함수, 다리 위의 트럭들의 총 무게를 구하는 함수.
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int[] bridge = new int[bridge_length];
int answer = 1;
int i=0;
Queue<Integer> queue = new LinkedList<>();
for(; i<truck_weights.length; i++){
queue.add(truck_weights[i]);
}
bridge[0] = queue.poll();
while(weight(bridge) != 0){
if(!queue.isEmpty() && weight(bridge) - bridge[bridge_length-1] + queue.peek() <= weight) {
move(bridge);
bridge[0] = queue.poll();
} else {
move(bridge);
}
answer++;
}
return answer;
}
public int[] move(int[] bridge) {
for(int i=bridge.length-2; i>=0; i--){
bridge[i+1] = bridge[i];
}
bridge[0] = 0;
return bridge;
}
public int weight(int[] bridge) {
int total_weight = 0;
for(int i=0; i<bridge.length; i++){
total_weight += bridge[i];
}
return total_weight;
}
}
다른 사람들의 답을 보니 트럭 클래스를 선언하신 분도 있다..
다음에는 나도 그렇게 해봐야지!