線形探索メニュー【偶数の探索・奇数の探索・最小値・最大値・点の距離・範囲内の点・成績優秀者1〜2】
【STEP: 1】コード
reader.on('close', () => {
const n = Number(lines[0]);
const a = lines[1].split(' ').map(Number);
for (let i = 0; i < n; i++) {
if (a[i] % 2 === 0) { // a[i] が 2 で割り切れれば…
console.log(i + 1); // i + 1を出力
break; // ループを止める
}
}
});
a[i]
が 2 で割り切れれば i + 1を出力して break でループを止めればOK。
【STEP: 2】コード
reader.on('close', () => {
const n = Number(lines[0]);
const a = lines[1].split(' ').map(Number);
for (let i = n - 1; i >= 0; i--) { // 末尾からループ
if (a[i] % 2 === 1) { // a[i] を 2 で割った余りが 1 なら…
console.log(i + 1); // i + 1を出力
break; // ループを止める
}
}
});
a[i]を
2 で割った余りが 1 なら i + 1を出力。
【STEP: 3】コード
reader.on('close', () => {
const n = Number(lines[0]);
const k = Number(lines[2]);
const a = lines[1].split(' ').map(Number);
a.sort((s, b) => s - b); // a を 昇順に並替
for (let i = 0; i < n; i++) {
if (a[i] >= k) { // a [i] が k 以上なら…
console.log(a[i]); // a[i] を 出力
break;
}
}
});
a.sort((s, b) => s - b)
で a を小さい順に並べ替えて a[i]
が k 以上になるまで ループ。
【STEP: 4】コード
reader.on('close', () => {
const n = Number(lines[0]);
const k = Number(lines[2]);
const a = lines[1].split(' ').map(Number);
a.sort((s, b) => b - s); // a を 降順に並替
for (let i = 0; i < n; i++) {
if (a[i] <= k) { // a [i] が k 以下なら…
console.log(a[i]); // a[i] を 出力
break;
}
}
});
a.sort((s, b) => b - s)
で a を大きい順に並べ替えて a[i] が k 以下になるまで ループ。【STEP: 5】コード
reader.on('close', () => {
const n = Number(lines[0]);
const k = Number(lines[n + 1]);
let ans = 0;
for (let i = 1; i <= n; i++) {
const [xn, yn] = lines[n].split(' ').map(Number); // 点 n の座標
const [x, y] = lines[i].split(' ').map(Number); // 点 n 以外の各座標
const [X, Y] = [xn - x, yn - y].map(Math.abs); // X, Y は xn - x, yn - y の絶対値
if (X + Y <= k) { // マンハッタン距離が k 以下なら…
ans++; // ans を加算
}
}
console.log(ans);
});
点 [xn, yn]
と 点 [x, y]
の マンハッタン距離 は [xn - x, yn - y].map(Math.abs)
で引き算の値の 絶対値 を求めて足し合わせればOK。
【STEP: 6】コード
reader.on('close', () => {
const n = Number(lines[0]);
let ans = 0;
for (let i = 1; i <= n; i++) {
const [x_s, x_t] = lines[n + 1].split(' ').map(Number); // 長方形の x 座標
const [y_s, y_t] = lines[n + 2].split(' ').map(Number); // 長方形の y 座標
const [x, y] = lines[i].split(' ').map(Number); // 点の座標
if (x >= x_s && x <= x_t && y >= y_s && y <= y_t) { // 点の座標 が長方形の座標内に収まれば
ans++; // ans を加算
}
}
console.log(ans);
});
長方形の左上は [x_s, y_s]
右下は[x_t, y_t]なので [x, y]
の各値が 左上以上 且つ 右下以下なら ans を加算しました。
【STEP: 7】コード
reader.on('close', () => {
const n = lines[0] - 0;
const k = lines[n + 1];
for (let i = 1; i <= n; i++) {
const [s, t] = lines[i].split(' '); // s は生徒名, t はテストの点数
if (t - k >= 0) { // テストの点数 - 基準点 が 0 以上なら…
console.log(s); // 生徒名を出力
}
}
});
得点 t – 基準点 k が 0 以上 なら 生徒名 s を表示。
【FINAL】コード
reader.on('close', () => {
const n = lines[0] - 0;
const [k, l] = lines[n + 1].split(' ');
for (let i = 1; i <= n; i++) {
const [s, t] = lines[i].split(' ');
if (t - k >= 0 && l - t >= 0) { // 得点 - k が 0 以上 且つ l - 得点 が 0 以上 なら…
console.log(s); // 生徒名を出力
}
}
});
得点 t – 基準点 k が 0 以上 で 更に 基準点 l – 得点 t が 0 以上なら 生徒名 s を出力。
コメント