【初心者】Paizaの問題集の解答例を教えてください
解決したいこと
paizaのスキルチェック問題集(JavaScript)をやっているのですが、ソートが苦手でどうしてもわからない問題があります。ChatGPTに投げても納得行く解答が得られなかったため、解答例を教えていただけると幸いです。よろしくお願い致します。
paizaのスキルチェック問題集(JavaScript)をやっているのですが、ソートが苦手でどうしてもわからない問題があります。ChatGPTに投げても納得行く解答が得られなかったため、解答例を教えていただけると幸いです。よろしくお願い致します。
とりあえず動作確認したものを抜粋して置いておきます.
reader.on('close', () => {
const N = lines[0];
// 個人の財産
const person = [];
for (let i = 0; i < N; i++) {
const [g, s] = lines[i + 1].split(" ");
person.push({ g, s });
}
// ソート
person.sort((a, b) => {
if (a.s === b.s) {
return b.g - a.g;
}
return b.s - a.s;
});
person.forEach(p => console.log(`${p.g} ${p.s}`));
});
読み取ったデータに対し,シンプルに1人分のデータを1つのオブジェクト{g, s}
にしてperson
に格納しています.
略記していますが{g, s}
は{g: g, s: s}
と等価です.
中身はa.g
のようにkeyを指定すれば取り出せるので,あとはsort
内で同じkey同士を比較してやればいいです.
sort
は元の配列を変更するため取扱注意です.
@Pocketroppo
Questioner
@Pocketroppo
Questioner
1つのキーでのソートが分かっているのであれば、2つのキーを1つにしてソートする方法もあります。
例えば、
0 ≤ g_i, s_i ≤ 50 なので、w_i = s_i * 100 + g_i として新しいキーを作ります。
(g_i の最大の桁数が2なので、s_iを100倍しています。)
入力例2 では、
g_i | s_i | w_i |
---|---|---|
2 | 3 | 302 |
0 | 4 | 400 |
5 | 0 | 5 |
3 | 3 | 303 |
となるので、この w_i をキーとしてソートします。
ソート後は、
g_i は w_i を100で割った余り
s_i は w_i を100で割った商の整数部分、
として取り出すことで、出力することができます。
@Pocketroppo
Questioner
JavaScriptだとArray.prototype.sort
が使えそうですが,この使い方が分からないという話でしょうか?それともそもそも取っ掛りが分からないとか.
題意を読む限りソート効率とかは気にしなくてよさそうなので,ソートアルゴリズムまで説明するまでもなさそうですが,いかがでしょうか.
@Pocketroppo
Questioner