// bridge_length: 다리에 올라갈 수 있는 최대 트럭의 개수
// weight: 다리가 견딜 수 있는 무게
// truck_weights: 트럭 별 무게
function solution(bridge_length, weight, truck_weights) {
let answer = 0;
// 다리 상황
let bridge = Array.from({ length: bridge_length }, () => 0);
let sum = 0;
let nextTruckWeight = truck_weights.shift();
answer += 1;
// 다리에 올라간 트럭 무게 합
sum = nextTruckWeight;
// 새로운 트럭을 다리에 올림
bridge.push(nextTruckWeight);
// 맨 앞 빼줌
bridge.shift();
while(sum) {
answer += 1;
sum -= bridge.shift();
if(sum + truck_weights[0] <= weight) {
nextTruckWeight = truck_weights.shift();
sum += nextTruckWeight;
bridge.push(nextTruckWeight);
}
else bridge.push(0);
}
return answer;
}
큐를 다리의 현재 상황으로 생각하면서 풀면 연상이 잘되고, 쉽다.
트럭은 오른쪽에서 들어오고, 트럭이 없는 자리는 0으로 채워주면 된다.
그리고 시간이 지날때마다 큐의 맨 앞에서 하나씩 빼주면 된다.
만약 다리 위에 있는 트럭의 무게의 총합과 들어와야 할 트럭의 무게의 합이 가용 무게를 넘지 않을 경우에는 무게 총합에 더해주고, 그렇지 않을 경우에는 큐에 0을 push 해주기만 하면 된다.
'PS > Programmers' 카테고리의 다른 글
Programmers / Level 2 / 구명보트 / JS (0) | 2022.12.29 |
---|---|
Programmers / Level 2 / [3차] 파일명 정렬 / JS (0) | 2022.12.27 |
Programmers / Level 2 / 소수 찾기 / JS (0) | 2022.12.27 |
Programmers / Level 2 / 영어 끝말잇기 / JS (0) | 2022.12.27 |