1
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 2022-09-19

プログラミングレベル (paizaランク C 相当)

JavaScriptで解いてみました。

解答例

問題は好きな順序で解くことができるので、考えやすいように、aを難易度が小さい順にソートしておきます。
あとは、問題文に従って、aの難易度が小さい順に、以下の条件を満たすか調べていきます。

難易度 a_i の問題を解くには「プログラミングレベル」が a_i 以上である必要
難易度 a_i の問題を解くと「プログラミングレベル」が a_i + 1 になる

変数flagを使って判定をします。
途中で解けなかったらfalse→No、全部解けたらtrue→Yesを出力します。

JavaScript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//問題の個数 n
const [n, q] = lines[0].split(" ").map(Number);
//問題の難易度 a
const a = lines[1].split(" ").map(Number);

//問題は好きな順序で解くことができるので、考えやすいようにaを昇順にソート
const aSorted = a.sort((a, b) => a - b);

//aを難易度が小さい順に調べる
let kyoko = 1;//京子ちゃんのプログラミングレベル
let flag = true;//全ての問題が解けるか
for (let i = 0; i < n; i++) {
    //難易度 a_i の問題を解くには「プログラミングレベル」が a_i 以上である必要
    if (kyoko >= a[i]) {
        //難易度 a_i の問題を解くと「プログラミングレベル」が a_i + 1 になる
        kyoko = a[i] + 1;
    } else {
        flag = false;//解けなかった
        break;
    }
}
console.log(flag ? "Yes" : "No");

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

問題aを考えやすいように昇順にソートする。
京子ちゃんの初期レベルは1なので、難易度1の問題がないと解けない。
解いたらレベルが1上がるので、次に解く問題は+1以下でないと解けない。
以上を全て満たせばYes!満たさなかったらNo。

C++はreturnで処理を止められるが、JavaScriptはreturnではなく、try…catchを使うとできる。しかし、少し煩雑になるので、flagでYesとNoの判定をした。

JavaScript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//問題の個数 n
const [n, q] = lines[0].split(" ").map(Number);
//問題の難易度 a
const a = lines[1].split(" ").map(Number);

//問題は好きな順序で解くことができるので、考えやすいように
//aを昇順にソート
const aSorted = a.sort((a, b) => a - b);

let flag = true;//京子ちゃんが問題を全部解けるか
//京子ちゃんの初期レベルが1なので、問題レベル1がないと解けない
if (a[0] !== 1) {
    flag = false;
} else {
    //aを難易度が小さい順に調べる
    for (let i = 0; i < n - 1; i++) {
        //次に解く問題の難易度は同じか+1でないと解けない
        if (!(a[i + 1] <= a[i] + 1)) {
            flag = false;
        } 
    }
}    
console.log(flag ? "Yes" : "No");
1
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
1
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?