ブリッジトラック(JAVA)


プログラマーブリッジトラック

に答える


この問題はQで解決できる.
ただ問題があれば規定の重さを超えて橋に載せることはできないのでifゲートをたくさん使う必要があります.
  • 橋が空いていたらトラックを入れます.
  • 橋の長さが現在の橋の列の長さと同じであれば、トラックは橋の反対側に着くので、列から外します.(次のトラックは間もなく駅に入る)
  • 現在、橋の重量と次のトラックの重量の和が制限重量を超えなければ、橋にトラックを1台増やします.
  • 現在トラックを置くことができない場合は、0を入れて、1台のトラックが橋から出るまで入れます.
  • 今はトラックを積む時間だけを考えていますが、結果値は時間に橋をかけて返却します.

    コードと実行結果

    import java.util.LinkedList;
    import java.util.Queue;
    
    class Solution {
       public static int solution(int bridge_length, int weight, int[] truck_weights){
            int time = 0;
            Queue <Integer> bridge = new LinkedList<Integer>();
            int current_weight = 0;
            for(int truck : truck_weights){
                while(true){
                    if(bridge.isEmpty()){
                        bridge.offer(truck);
                        current_weight += truck;
                        time++;
                        break;
                    }
                    else if(bridge.size()==bridge_length){
                        current_weight -= bridge.poll();
                    }
                    else if(current_weight+truck <= weight){
                        bridge.offer(truck);
                        current_weight += truck;
                        time++;
                        break;
                    }else{
                        bridge.offer(0);
                        time++;
                    }
                }
            }
            return time + bridge_length;
        }
    }

    知るところ


    JavaのQUEクラスを使うのは初めてです.
    Queue <Integer> bridge = new Queue<Integer>();
    最初は上のコードで宣言したと思っていました.しかし、この形式はJavaでは提供されていないと述べた.だから….
    Queue <Integer> bridge = new LinkedList<Integer>();
    Qは以下のように宣言すべきである.本当に初めて知りました.
    また,Qは異なるenqueueとdequeue関数を提供する.
    queue.offer(원하는 데이터); //큐에 넣기
    queue.poll(); // 큐에서 빼기
    queue.peek(); // 큐에서 직접적인 삭제 없이 앞에 있는거 보여주는 기능
    後でスタックヒントクラスがもっと自由に使えるようになりました!