5
1

江戸っ子への偏見がすごいw

ただしお客さんは江戸っ子なので、それら座席のうち、いずれか一つでも既に先客に座られている座席があった場合、
一人も座らずにグループ全員で怒って帰ってしまいます。江戸っ子は気が早いんでぃ。

この問題の世界の住人はヤベェ奴らしかおらんのか。。。

面倒くさいので画面パタメータをListでもらった後のFunctionだけ

ちなみに引数のListを作ってる箇所はこっちの記事に書いてあるYO!!

longTable.js
// [問題文(原文)]
// 東京の下町に長テーブルで有名な老舗うなぎ屋がありました。
// 
// そのうなぎ屋にはとても大きい長テーブルがあり、テーブルの周りにn個の座席が配置されています。
// 座席には、時計回りに1, 2, …, nと番号が振られています。
// 座席はテーブルの周りに配置されているので、座席番号nの座席と1の座席は隣接しています。
// 今、m個のグループの人達が座席に順番に座りに来ます。i番目(1≦i≦m)のグループの人数をa_i人とします。
// 彼らは、長テーブルに並んだ座席の内、ある連続するa_i個の座席に一斉に座ろうとします。
// 
// ただしお客さんは江戸っ子なので、それら座席のうち、いずれか一つでも既に先客に座られている座席があった場合、
// 一人も座らずにグループ全員で怒って帰ってしまいます。江戸っ子は気が早いんでぃ。
// 
// 入力では、i番目のグループが座ろうとする連続した座席の位置は、整数b_iにより指定されます。
// i番目のグループは、座席番号b_iの座席を始点として、そこから時計回りにa_i個分の座席に座ろうとします。
// 
// 最後のグループが座りに来た後、無事に長テーブルの座席に着席出来ている人数を出力するプログラムを作成してください。
function longTable(lines) {
  // 入力は以下のフォーマットで与えられます。
  // 入力はm+1行から成ります。
  // 1行目にはn(座席数)とm(グループ数)が半角スペース区切りで入力されます。
  // i+1行目(1≦i≦m)には2個の整数a_i(グループの人数)とb_i(着席開始座席番号)が半角スペース区切りで入力されます。

  // 入力チェック面倒くさいので正常系のみ対応するよ
  const [seatCnt, groupCnt] = lines[0].split(" ").map(v => Number(v));
  let seats = {};
  Array.from({ length: seatCnt }).forEach((_, i) => seats[i + 1] = false);
  lines.slice(1).forEach(line => {
    const [group, startSeat] = line.split(" ").map(v => Number(v));
    // 全員座れるかチェック(駄目ならreturnして次のグループへ)
    for (let i = 0; i < group; i++) 
      if (seats[(startSeat + i) > seatCnt ? 1 : startSeat + i]) return;
    // 座れる場合だけ設定
    for (let i = 0; i < group; i++)
      seats[(startSeat + i) > seatCnt ? 1 : startSeat + i] = true;
  });

  // 最後のグループが座りに来た後、無事に座席に着席出来ている人数を1行で出力してください。
  console.log(Object.values(seats).filter(v => v).length);

}

module.exports = {
  longTable
};

for文2回書いてるのマジで気持ち悪いけど、座れるかチェックと席案内を一緒に書ける気がしなかった。。。

5
1
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
5
1