[プログラマー]42583号:ブリッジトラック
9293 ワード
コード#コード#
import java.util.LinkedList;
import java.util.Queue;
public class PRO_42583 {
public static int solution(int bridge_length, int weight, int[] truck_weights) {
Queue<Integer> queue = new LinkedList<>();
int sum = 0;
int time = 0;
for (int i = 0; i < truck_weights.length; i++) {
int truck = truck_weights[i];
while (true) {
if (queue.isEmpty()) {
queue.add(truck);
sum += truck;
++time;
break;
} else if (queue.size() == bridge_length) {
sum -= queue.poll();
} else {
if (sum + truck <= weight) {
queue.add(truck);
sum += truck;
++time;
break;
} else {
queue.add(0);
++time;
}
}
}
}
return time + bridge_length;
}
public static void main(String[] args) {
int bridge_length = 2;
int weight = 10;
int[] truck_weights = {7, 4, 5, 6};
System.out.println(solution(bridge_length, weight, truck_weights));
}
}
答えと感じ
キューを利用して問題に近づいた.
橋の上にトラックを置く条件は全部で3種類ある.
キューが空の場合はトラックに入れ、トラックの重量を格納する合計値まで増やします.そして時間が1増加します.
キューが不満の場合は、2つのケースに分けられます.トラックを追加すると、橋の長さを超える場合があり、逆も同様です.超えた場合は、0を加えると、時間が1増加します.超えなければ、追加のトラックの重量をsumに加えて1時間増やします.
列がいっぱいの場合は、前のトラックを取り外し、sumから前のトラックの重量を減算します.
正解を出力するとき、時間に橋の長さを加えるのは、最後のトラックが橋を渡る時間を加えるからです.ドアの最後のトラックのことしか考えていないので、帰りにも考えたことがあります.
参考資料
Reference
この問題について([プログラマー]42583号:ブリッジトラック), 我々は、より多くの情報をここで見つけました https://velog.io/@doeunllee/프로그래머스-42860번-조이스틱-sxujv7r8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol