二重ループメニュー【指定された範囲・行数の数字の出力・二次元配列での要素の検索・最大の要素・行ごとの和・積の最大 ほか】
【STEP: 1】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(i); // A に i(1〜N)を追加
}
console.log(A.join(' ')); // 連結して出力
});
for文で カウンタ変数 i の値を配列 A に保存後 join(' '
) で 値を連結して出力しました。
【STEP: 2】コード
reader.on('close', () => {
const N = Number(lines[0]);
for (let i = 1; i <= N; i++) {
console.log(i); // i(1〜N)を出力
}
});
カウンタ変数 i の値を for文 でループしながら出力しました。
【STEP: 3】コード
reader.on('close', () => {
const N = Number(lines[0]);
for (let i = 1; i <= N; i++) {
const A = [];
for (let j = 1; j <= 5; j++) {
A.push(j);
}
console.log(A.join(' '));
}
});
1〜5 の値を持つ配列 A を N 回出力 しています。
【STEP: 4】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
for (let i = 1; i <= K; i++) {
const A = [];
for (let j = 1; j <= N; j++) {
A.push(j);
}
console.log(A.join(' '));
}
});
1〜N の値を持つ配列 A を K 行出力。
【STEP: 5】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(lines[i].split(' ').map(Number));
console.log(A[i - 1].join(' '));
}
});
2次元配列化しましたが 出力は join(' ')
を使ったので2重ループにはならなかった…。(^_^;
【STEP: 6】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
for (let i = 1; i <= N; i++) {
const A = lines[i].split(' ').map(Number);
for (let j = 0; j < K; j++) {
if (A[j] === 1) {
console.log(i, j + 1);
break;
}
}
}
});
最初のループで lines[i]
を配列に変換して A に保存。2つ目のループで A の各値にアクセスし 1 であれば i と j + 1 を表示しています。
【STEP: 7】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
let max = 0;
for (let i = 1; i <= N; i++) {
const A = lines[i].split(' ').map(Number);
for (let j = 0; j < K; j++) {
if (A[j] > max) {
max = A[j];
}
}
}
console.log(max);
});
最初のループで lines[i]を配列に変換して A に保存。2つ目のループで A の各値にアクセスして 変数 max より大きければ max の値を更新しました。
【STEP: 8】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
for (let i = 1; i <= N; i++) {
const A = lines[i].split(' ').map(Number);
console.log(A.reduce((a, c) => a + c));
}
});
便利な reduce()
使ってます。
【STEP:9】コード
reader.on('close', () => {
const N = Number(lines[0]);
for (let i = 1; i <= N; i++) {
const A = lines[i].split(' ').map(Number);
A.shift();
console.log(A.reduce((a, c) => a + c));
}
});
問題の趣旨と合わないような気がしますが 入力の最初の値を削除して 要素の和を出力しています。。
【STEP:10】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(i);
console.log(A.join(' '));
}
});
A の 値を増やしながら出力しています。
【FINAL】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const A = lines[1].split(' ').map(Number);
const B = lines[2].split(' ').map(Number);
let max = -100 * 100; // max の初期値は入力条件の 最小 ✕ 最大
for (let i = 0; i < N; i++) {
for (let j = 0; j < K; j++) {
const n = A[i] * B[j];
if (n > max) {
max = n;
}
}
}
console.log(max);
});
出力値の初期値は 入力条件の範囲内での 積の最小値に設定しました。2重ループで全ての積の結果を比較して max より大きければ max を上書きしています。
コメント