ブリッジトラック(ps反省)

6980 ワード

プログラマー...


最近プログラマーの第2段階を解いてみましたが、ちょっと難しい・・・本当に反省します一生懸命勉強しなければなりません.
説明:ブリッジトラック
簡単な説明:トラックはまず重量制限のある橋を通過し、トラックは少なくとも1秒ごとに1回移動することができ、橋の長さ、足の支持重量、トラックの重量をパラメータとする関数であり、トラックが通過するのに要する時間を返す関数である.
まず例を挙げて説明する
タイムブリッジを通るトラック待ちトラック0[][7,4,5,6]1~2[][7][4,5,6]3[7][4][4][5][4,5][6][7]6~7[7][4,5][6][6][8][7,4,5,6][7][7][7][7,4,6][6][8][7,4,5,6][][7,4,5][7][7][7][7][7][7][7][7][4,5][][][7][7][7][4,5][7][7
これはこんなに多くの考慮すべき要素を持つ関数です.この問題を解くには、まだまだだと思います.
I/O例
bridge_lengthweighttruck_weightsreturn210[7,4,5,6]8100100[10]101100100[10,10,10,10,10,10,10,10,10,10]110
コード#コード#
function solution(bridge_length, weight, truck_weights) {
  let timeCount = 0;
  //총시간이다.
  let bridge = [];
  //다리를 지나는 트럭의 하중을 표시한 배열이다.
  let flag = true;
  let currWeight = 0;
  //현재하중을 다합친 배열
  
  for (let i = 0; i < bridge_length; i++) {
    bridge.push(0);
  }//처음부터 끝까지 하중이 0이되는 배열을 만든다.

  while (flag) {
    let shiftVal = bridge.shift();//일초가 지날경우 트럭이 빠져나오는 로직
    currWeight -= shiftVal;//=> 트럭이 빠져 나올 경우 하중을 빼준다.
    if (currWeight + truck_weights[0] > weight) {
      //다리의 현재 하중과 들어갈 트럭의 무게를 더한값을 다리무게와 비교해서 더 크다면 0을 푸쉬한다.
      bridge.push(0);
    } else {
      //그게 아니라면 현재 하중의 들어갈 트럭의 하중을 더하고 
      currWeight += truck_weights[0];
      bridge.push(truck_weights[0]);
      //다리위에 트럭이 올라가고
      truck_weights.shift();
      // 하나가 빠진다.
    }
    //한바퀴가 돌면 1초가 증가
    timeCount++;
    //만약에 트럭이 다 올라타고 트럭배열이 빈다면..
    if (truck_weights.length === 0) {
      for (let i = 0; i < bridge_length; i++) {
        timeCount++;//=> 제일 마지막 트럭이 다 통과할떄까지 초를 세어야한다.
      }
      flag = false;//그리고 이제 루프를 멈춘다.
    }
  }
  return timeCount;
}
ちょっと難しいけど、頑張ればいいんだろうなぁ