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?

【条件判定 2】視力検査

Posted at

今回は paiza の「【条件判定 2】視力検査」の問題に挑戦!


問題概要

  • 視力は A 〜 E の5段階。
  • 視力判定にはテスト TA, TB, TC, TD があり、それぞれ段階 A, B, C, D に対応する。
  • テストの判定ルール:
    • 同じ段階で「成功2回」する前に「失敗2回」したら → 不合格
    • 同じ段階で「失敗2回」する前に「成功2回」したら → 合格
  • 判定結果は 合格した段階のうち最も良い段階(Aに近いほど良い) が視力になる。
  • どの段階にも合格しなかった場合は E とする。



入力例:

4
TA ok
TA ng
TA ng
TA ok

出力例:

E






✅ OK例:

const rl = require("readline").createInterface({ input: process.stdin });
const lines = [];

rl.on("line", (input) => lines.push(input));
rl.on("close", () => {
  const n = Number(lines[0]); 
  const tests = lines.slice(1).map((line) => line.split(" ")); 

  // テスト名を段階に対応づけ
  const mapTestToLevel = {
    TA: "A",
    TB: "B",
    TC: "C",
    TD: "D",
  };

  // 成功・失敗カウント
  const success = { A: 0, B: 0, C: 0, D: 0 };
  const fail = { A: 0, B: 0, C: 0, D: 0 };

  // 判定状態
  const passed = { A: false, B: false, C: false, D: false };
  const rejected = { A: false, B: false, C: false, D: false };

  for (const [test, result] of tests) {
    const level = mapTestToLevel[test];

    // すでに合格 or 不合格なら無視
    if (passed[level] || rejected[level]) continue;

    if (result === "ok") {
      success[level]++;
    } else {
      fail[level]++;
    }

    if (success[level] === 2) {
      passed[level] = true;
    } else if (fail[level] === 2) {
      rejected[level] = true;
    }
  }

  // 最も良い段階を出力
  if (passed["A"]) {
    console.log("A");
  } else if (passed["B"]) {
    console.log("B");
  } else if (passed["C"]) {
    console.log("C");
  } else if (passed["D"]) {
    console.log("D");
  } else {
    console.log("E");
  }
});

🔹入力を受け取る

  • 1行目にテスト回数 N
  • 2行目以降に テスト名 結果 (TA ok など)

🔹テスト名を段階 (A~D) にマッピング

const mapTestToLevel = { TA:"A", TB:"B", TC:"C", TD:"D" };

🔹各段階で成功回数・失敗回数をカウント

  • success[level]
  • fail[level]

🔹判定

  • 成功が2回に達したら passed[level] = true
  • 失敗が2回に達したら rejected[level] = true
  • どちらかが確定したら以降はその段階を無視

🔹最終的な視力判定

  • 上から順に A → B → C → D をチェック
  • 最初に passed したものが視力
  • どこも合格していなければ "E"





🗒️ まとめ

  • 段階ごとに独立して判定する必要がある(AのテストはA判定だけに影響)。

  • 「成功/失敗」を カウントして早い方が2に到達したら確定。

  • 確定した段階はそれ以降の入力を無視する。

  • 最終的に合格がある場合は A→B→C→D の優先順位で決定。

  • 合格が一つもない場合は E を出力する。




僕の失敗談(´;ω;`)と解決法🐈

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?