0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

paizaラーニング レベルアップ問題集 スタック・キューメニュー応用編 JavaScript 満員エレベーター

Last updated at Posted at 2023-01-17

満員エレベーター (paizaランク B 相当)

解答例(C++の場合参考)

エレベーターをスタックと見なします。
rideでのw_1 w_2 ... w_Nをスプレッド構文[...w]に納めた。
get offはただpopをk回繰り返した。

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

//乗り降りの回数 N とエレベーターの重量制限についての値 X
const [n, x] = lines[0].split(" ").map(Number);
let customer_sum = 0;//乗車人数
let kg_sum = 0;//合計体重

let elevator = [];//エレベーター、スタックで扱います。

//エレベーター乗り降り
for (let i = 1; i <= n; i++) {
  const Q = lines[i].split(" ").map((v, i) => i === 0 ? v : Number(v));

  if (Q[0] === "ride") {
    const [_, N, ...w] = Q;
    //エレベーターに乗る
    for (let j = 0; j < N; j++) {
      //重量制限以内
      if (kg_sum + w[j] <= x) {
        customer_sum++;
        elevator.push(w[j]);
        kg_sum += w[j];
      }
    }
    
  } else {
    //k人降りる
    const [_, k] = Q;
    for (let j = 0; j < k; j++) {
      kg_sum -= elevator[elevator.length - 1];
      elevator.pop();
    }
    customer_sum -= k;
  }
}

console.log(customer_sum);
console.log(kg_sum);

customer_sumを無くして、代わりにelevator.lengthの出力でも大丈夫。

k人降りるところのfor内は、popの戻り値が末尾の値なので、以下のようにも書ける。

kg_sum -= elevator.pop();
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?