データセット選択メニュー【数値の出現率・英小文字の出現率・文字列の出現率・価格の算出・商品の検索】
【STEP: 1】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = lines[1].split(' ').map(Number);
const count = new Array(10).fill(0); // 初期値 0, 要素数 10 の配列
for (let i = 0; i < N; i++) {
count[A[i]]++; // A[i]の値を 添字として count[A[i]] の値を加算
}
console.log(count.join(' '));
});
配列 count の初期値は 0 が 10個。for文で count[A[i]]
の値を 1 増やしています。
【STEP: 2】コード
reader.on('close', () => {
const N = Number(lines[0]);
const S = lines[1].split('');
const a = 'a'.codePointAt(); // "a" の文字コード(97)
const count = new Array(26).fill(0); // "a" 〜 "z" は26字 なので 配列の要素数は 26
for (let i = 0; i < N; i++) {
count[S[i].codePointAt() - a]++; // S[i] が "a" の場合 添字は 97 ー 97 = 0
}
console.log(count.join(' '));
});
アルファベットは26字なので配列 count の要素数も 26。codePointAt()
は Unicode コードポイント値を返します。S[i] が “a” の場合 count の添字は “a” のコード – “a” のコード(97 -97) で 0になります。
【STEP: 3】コード
reader.on('close', () => {
const N = Number(lines[0]);
const S = [];
for (let i = 1; i <= N; i++) {
S.push(lines[i]);
}
S.sort(); // S の要素を辞書順に並替え
const M = new Map(); // マップ M を初期化
for (let i = 0; i < N; i++) {
switch (M.has(S[i])) { // M に S[i] は含まれる?
case false: // 含まれなければ…
M.set(S[i], 1); // M に {S[i](キー), 1(値)} の要素を追加
break;
case true: // 含んでいれば…
M.set(S[i], M.get(S[i]) + 1); // キー S[i] を 値 を + 1 して上書き
break;
}
}
for (const [key, value] of M.entries()) {
console.log(key, value); // M の キーと値をセットで出力
}
});
入力値を 配列 S に保存し sort()
で辞書順に並べ替え。マップ M に S[i]
が含まれているかどうかで条件分岐して 含まれていない場合は M に (key,1)を追加。含まれている場合は M.get(S[i])
の値を+1。マップの解説はこちらをご参照しました。
【STEP: 4】コード
reader.on('close', () => {
const [N, M] = lines[0].split(' ').map(Number);
const T = new Map(); // マップ T を初期化
for (let i = 1; i <= N; i++) {
const [a, b] = lines[i].split(' '); // a = 商品名, b = 価格
T.set(a, Number(b)); // T に {商品名, 価格} を保存
}
for (let i = N + 1; i < M + N + 1; i++) {
if (T.has(lines[i])) { // T (キー) に 入力値があれば…
console.log(T.get(lines[i])); // 該当するキーの値(価格)を出力
} else { // なければ…
console.log(-1); // -1 を出力
}
}
});
T.set(a, Number(b))
で マップ T に (商品名, 価格) を追加。 T.get(lines[i])
で 該当する商品の価格を出力しています。
【FINAL】コード
reader.on('close', () => {
const [N, Q] = lines[0].split(' ').map(Number);
const S = [];
for (let i = 1; i <= N; i++) {
S.push(lines[i]);
}
for (let i = N + 1; i < Q + N + 1; i++) {
if (S.includes(lines[i])) { // S に lines[i] が含まれば…
console.log(S.indexOf(lines[i]) + 1); // 最初に出現する S の添字 + 1 を出力
} else { // 含まれば…
console.log(-1); // −1 を出力
}
}
});
N 個の文字列を配列 S に保存。 S.includes(lines[i])
で S に入力値が含まれているかどうかの真偽値を取得し true なら 入力値が 最初に出現する Index を表示しています。
コメント