생각한 부분
- 주어진 조건 - 다리의 길이, 다리 위에 한 번에 올라갈 수 있는 무게, 트럭의 무게, 트럭은 1초에 1만큼 움직임
(ex. 다리의 길이가 3이면 트럭이 다리를 다 지나가는데 최소 4초가 걸림)
- return 값은 모든 트럭이 다리를 다 지나가는 최소한의 시간
- 빈 배열(arr)에 다리의 길이만큼 0을 넣어준다... 왜? 트럭이 다리 위를 지나가는 시간을 체크하기 위해서!
- 다리 위에 올라 올 트럭이 남지 않은 경우 arrSum이 0이 될 때까지 arr.pop()만 진행(첫 번째 if문 실행 ❌) 시간(answer)을 체크한다 ! (다리에 남은 트럭을 빼주기만 하는 과정)
- 아직 다리 위에 올라올 트럭이 남은 경우 (truck_weights.length !== 0) 다음 트럭이 다리 위에 올라 올 수 있을지 없을지 체크 !
5-1. 올라올 수 없는 경우 (arrSum + truck_weights[0] > weight) 다리에 0 하나 unshift로 추가
5-2. 올라올 수 있는 경우 truck_wieghts 배열에 맨 앞에서 하나 뽑아 다리에 올려주고, 다리 무게도 추가해 준다.
- 반복
내가 쓴 코드
function solution(bridge_length, weight, truck_weights) {
var answer = 0;
const arr = []
let arrSum = 0
for (let i = 0; i < bridge_length; i++) {
arr.push(0)
}
let leftPop = truck_weights.shift()
arr.pop()
arr.unshift(leftPop)
arrSum += leftPop
answer++
while(arrSum) {
arrSum -= arr.pop()
if (truck_weights.length !== 0) {
if (arrSum + truck_weights[0] > weight) {
arr.unshift(0)
} else {
leftPop = truck_weights.shift()
arrSum += leftPop
arr.unshift(leftPop)
}
}
answer++
}
return answer;
}