currentTruckIndex
로 현재 다리를 건널 차례인 truck을 가리키게 했다.queue
로 만들어서 트럭이 다리를 건너는 걸 표현했다.1. 현재 차례의 트럭이 다리를 건널 수 있으면 다리에 트럭 올리기
건널 수 없다면, 의미없는 값을 queue
에 넣어서 트럭이 다리를 건너는 걸 표현
2. 다리를 다 건넌 트럭 빼기
queue
의 크기가 bridge_length
와 같아지면, queue
의 첫번째 요소에 해당하는 트럭이 다리를 다 건넜다는 것을 의미한다.
3. 마지막에 answer + bridge_length - 1
를 해주는 이유
내 코드의 while의 조건문을 생각해보면 마지막 트럭이 다리에 오르자마자 while문을 탈출한다. 따라서 마지막 트럭이 다리를 다 건너는 시간까지 더해주어야 했다.
import java.util.*
class Solution {
fun solution(bridge_length: Int, weight: Int, truck_weights: IntArray): Int {
var answer = 1
var weightSum = 0
var currentTruckIndex = 0
val queue = ArrayDeque<Int>()
while (currentTruckIndex < truck_weights.size) {
// 1. 현재 차례의 트럭이 다리를 건널 수 있으면 다리에 트럭 올리기
if (weightSum + truck_weights[currentTruckIndex] <= weight) {
queue.offerLast(currentTruckIndex)
weightSum += truck_weights[currentTruckIndex++]
} else {
queue.offerLast(-1) // 의미없는 값, 트럭이 움직이는 걸 표현하기 위함
}
// 2. 다리를 다 건넌 트럭 빼기
if (queue.size == bridge_length) {
val outIndex = queue.pollFirst()
if (outIndex != -1) {
weightSum -= truck_weights[outIndex]
}
}
answer++
}
return answer + bridge_length - 1 // 마지막으로 올라간 트럭이 다리를 다 건너는 시간까지 더함
}
}