[プログラマー/スタック-キュー/3]ブリッジトラック(JS)
ソース:プログラマコードテストスタック/キュー第3題
( https://programmers.co.kr/learn/courses/30/lessons/42586 )
何台ものトラックが川にまたがる橋を所定の順序で渡りたいと思っている.すべてのトラックが橋を渡るのに少なくとも数秒かかります.橋の上で、トラックは最大bridge lengthロッドに乗ることができ、橋は重量より低い重量に耐えることができる.しかし、完全に橋を上がっていないトラックの重さは無視される.
例えば、2台のトラックに乗ることができ、10キロの重量に耐えられる橋があります.重量[7,4,5,6]kgのトラックは最短時間で順番に橋を渡りますので、次のように橋を渡ります.
そのため、すべてのトラックは少なくとも8秒で橋を渡ることができます.
solution関数のパラメータには、ブリッジに上がることができるトラックの数bridge length、足が受ける重量、トラック1台当たりの重量cart weightsが含まれます.解の関数を完了し、すべてのトラックが橋を渡るのに少なくとも数秒かかります.
bridge lengthは1 10000より大きい. 重量は1以上10000以下である. cart weightsの長さは1または10000以下です. すべてのトラックの重量は1以上です.
( https://programmers.co.kr/learn/courses/30/lessons/42586 )
問題の説明
何台ものトラックが川にまたがる橋を所定の順序で渡りたいと思っている.すべてのトラックが橋を渡るのに少なくとも数秒かかります.橋の上で、トラックは最大bridge lengthロッドに乗ることができ、橋は重量より低い重量に耐えることができる.しかし、完全に橋を上がっていないトラックの重さは無視される.
例えば、2台のトラックに乗ることができ、10キロの重量に耐えられる橋があります.重量[7,4,5,6]kgのトラックは最短時間で順番に橋を渡りますので、次のように橋を渡ります.
そのため、すべてのトラックは少なくとも8秒で橋を渡ることができます.
solution関数のパラメータには、ブリッジに上がることができるトラックの数bridge length、足が受ける重量、トラック1台当たりの重量cart weightsが含まれます.解の関数を完了し、すべてのトラックが橋を渡るのに少なくとも数秒かかります.
せいげんじょうけん
解答方法
ソースコード
function solution(bridge_length, weight, truck_weights) {
var answer = 0
const waitingTrucks = truck_weights.map((weight) => ({ weight, enterTime: -1 }))
const trucksOnBridge = []
const passedTrucks = []
let currentBridgeWeight = 0
let time = 0
while (passedTrucks.length !== truck_weights.length) {
time = time + 1
// 다리 지나가는 부분
if (trucksOnBridge.length !== 0) {
if (time - trucksOnBridge[0].enterTime === bridge_length) {
currentBridgeWeight -= trucksOnBridge[0].weight
passedTrucks.push(trucksOnBridge.shift())
}
}
// 다리로 들어오는 부분
if (waitingTrucks.length !== 0) {
if (weight >= currentBridgeWeight + waitingTrucks[0].weight) {
currentBridgeWeight += waitingTrucks[0].weight
waitingTrucks[0].enterTime = time
trucksOnBridge.push(waitingTrucks.shift())
}
}
}
return time
}
ポスト
Reference
この問題について([プログラマー/スタック-キュー/3]ブリッジトラック(JS)), 我々は、より多くの情報をここで見つけました https://velog.io/@moonjang/프로그래머스스택-큐3-다리를-지나는-트럭-JSテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol