配列活用メニュー【配列の順序の反転・変数の入れ替え・指定要素の入れ替え・要素の追加・削除・九九表・重複要素の削除 ほか】
【STEP: 1】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = []; // 元の配列
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
const B = [...A].reverse(); // 配列 A を B の要素として展開→逆順ソート
B.forEach(b => {
console.log(b); // Bの各要素を表示
});
});
スプレット構文(...A
)で A の値を配列 B の要素として展開して reverse()
で 逆順に並べ替えました。
【STEP: 2】コード
reader.on('close', () => {
let [X, Y] = lines[0].split(' ').map(Number);
[X, Y] = [Y, X]; // 順序を入れ替えて値の交換
console.log(X, Y);
});
配列の要素の順序を入れ替えるだけで 値の交換ができました。
【STEP: 3】コード
reader.on('close', () => {
const N = Number(lines[0]);
const [X, Y] = lines[N + 1].split(' ').map(Number);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
[A[X - 1], A[Y - 1]] = [A[Y - 1], A[X - 1]];
A.forEach(a => {
console.log(a);
});
});
配列の要素の入れ替えも 左辺・右辺で順序を入れ替えれば OKでした。
【STEP: 4】コード
reader.on('close', () => {
const N = Number(lines[0]);
const B = lines[N + 1];
const A = [];
for (let i = 0; i < N; i++) {
A[i] = lines[i + 1];
}
A.push(B);
A.forEach(a => {
console.log(a);
});
});
push()
で A の末尾に B を追加。【STEP: 5】コード
reader.on('close', () => {
const N = Number(lines[0]);
const [n, B] = lines[N + 1].split(' ').map(Number);
const A = [];
for (let i = 0; i < N; i++) {
A[i] = lines[i + 1]; }
A.splice(n, 0, B); // splice(開始位置,削除数,追加する要素)
A.forEach(a => {
console.log(a);
});
});
splice(位置, 削除数0, 追加する要素)
で要素の追加ができました。
【STEP: 6】コード
reader.on('close', () => {
const N = Number(lines[0]);
const n = lines[N + 1];
const A = [];
for (let i = 1; i <= N; i++){
A[i - 1] = lines[i];
}
A.splice(n - 1, 1); // splice(開始位置,削除数)
A.forEach(a => {
console.log(a);
});
});
splice(n(位置), 1(削除数))
で n番目の要素を削除することができました。
【STEP: 7】コード
const A = [];
for (let i = 0; i < 9; i++) {
A.push([i + 1]); // 1 列目(1〜9)
for (let j = 1; j < 9; j++) {
A[i].push(A[i][0] + A[i][j-1]); // i 行目
}
}
A.forEach(a => {
console.log(a.join(' '));
});
2次元配列の九九表です。
【STEP: 8】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
for (let i = 1; i < N; i++) {
for (let j = 0; j < i; j++) {
// A[1]*A[0] → A[2]*A[0] → A[2]*A[1] 〜 A[N-1]*A[N-2]
console.log(A[i] * A[j]);
}
}
});
出力の順番が指定されているので指示通り表示されるように 2重ループで出力しました。
【STEP: 9】コード
reader.on('close', () => {
const [N, n] = lines[0].split(' ').map(Number);
const A = [];
const B = new Array(n).fill(0); // B の初期値は n 個の 0
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
for (let i = 0; i < Math.min(N, n); i++) { // i の範囲は(N, n)の小さい方未満まで
B[i] = A[i]; // B[i] を A[i] で上書き
}
B.forEach(b => {
console.log(b);
});
});
n 個 の 0を保持する配列 Bを宣言。カウンタ変数 i の範囲をAとBの要素数の小さい方未満までとし B[i] の値を A[i]で上書きしています。
【STEP: 10】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
const S = new Set(A); // Set() に同じ値は保存できない→重複は削除される
const B = [...S]; // Set() の 値を展開して 新配列 B を生成
B.forEach(b => {
console.log(b);
});
});
Set() の仕様を利用して 配列 A の要素の重複を削除しました。そして S の値を 配列 B の要素として展開 しています。
【FINAL】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const A = []; // 元の配列
const B = []; // K 以上の要素を抽出した 配列
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
for (let i = 0; i < N; i++) {
if (A[i] >= K) { // A[i] が K 以上なら…
B.push(A[i]); // B に A[i] を追加
}
}
B.forEach(b => {
console.log(b);
});
});
for文 で A の要素に順次アクセスし K 以上であれば B の要素として保存。
コメント