配列活用メニュー【指定の要素のカウント・全ての要素の和・配列の最大値・最小値・全ての要素に対する操作 ほか】
【STEP: 1】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const A = [];
let ans = 0; // K の数 0 で初期化
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i])); // A に入力値を保存
}
for (let i = 0; i < N; i++) {
if (A[i] === K) { // A[i] が K と一致すれば…
ans++; // ans を加算
}
}
console.log(ans);
});
ans を 0 で初期化。if文 で条件分岐して K と一致すれば ans を加算。
Task
【STEP: 2】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
const total = A.reduce((a, c) => a + c); // 要素を順に加算した最後の処理結果
console.log(total);
});
reduce((a, c) => a + c)
の a はアキュムレータの値を保存…。詳しくは MDN Plus 様の解説をご参照下さい。
【STEP: 3】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
console.log(Math.max(...A)); // 配列をスプレット構文で展開した値の最大値を抽出
});
配列 A の値を展開し Math.max()
で最大値を抽出。
【STEP: 4】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
console.log(Math.min(...A)); // 配列をスプレット構文で展開した値の最小値を抽出
});
Math.min()
で最小値を抽出。【STEP: 5】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
console.log(A.includes(K) ? 'Yes' : 'No');
});
includes()
で A に K が含まれるかどうか調べて 三項条件演算子で出力値を制御しています。
【STEP: 6】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const A = [-1]; // A[0] の値は 0 ≦ K なので 負の数なら何でも良い
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
console.log(A.indexOf(K));
});
A.indexOf(K)
で K のindex が 返されますが index は 0 から始まるので あらかじめ A[0] に K の 値の 条件の範囲外の値 を代入しています。K が含まれない場合はの戻り値は -1 なので 指示通り出力できました。
【STEP: 7】コード
reader.on('close', () => {
const N = Number(lines[0]);
const S = new Set(); // Setは同じ値を要素として持つことができない
for (let i = 1; i <= N; i++) {
S.add(Number(lines[i])); // Set.add(値)で要素を追加(同じ値が既存すれば追加できない)
}
const A = [...S]; // S の値を 配列 A の要素として 展開
console.log(A.length); // A の要素数を表示
});
重複を省きたいのでSet()
に値を保存しましたが そのままでは要素数を取得できないので 配列 A の要素として 値を展開して要素数を取得しました。
【FINAL】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
// コード1 …forEach()で加算しながら出力
A.forEach(a => {
a += K;
console.log(a);
});
// コード2 …map()で戻り値を出力
A.map(a => {
console.log(a + K);
});
});
コード1 …配列 A の各要素 (a) にK を加算して上書きして出力。
コード2 …map()で戻り値を出力。
コメント