私はこれまでC・Bランクを解いてきました。計算方法は気にせず自分の思うように解けるので難しい印象はありませんでした。
しかし、Aランクから一筋縄ではいかない様子。
特に「本の整理」問題はアルゴリズムを使用しなければいけないようです。
ということで、挑戦してみました。※問題文はURLから確認してください。
解き方
結論、「選択ソート」を使用しました。
配列の先頭から順番に最小の要素を選び、並び替えていくアルゴリズムです。
-
for
文にそって比較の元になるインデックスを決めていきます。ここではminIndex
と表現しています - そこから値を比較し、より小さい値があるか精査します。もしあった場合、最小値のインデックスが変わるので、
minIndex
を更新します - 最終的には元インデックスと最小インデックスにある値を入れ替えます
const bookIds = lines[1].split(' ').map(line => Number(line));
let swapCount = 0;
for (let i = 0; i < bookIds.length; i++) {
let minIndex = i;
for (let j = i + 1; j < bookIds.length; j++) {
if (bookIds[j] < bookIds[minIndex]) {
minIndex = j;
}
}
if (i === minIndex) {
continue;
}
[bookIds[minIndex], bookIds[i]] = [bookIds[i], bookIds[minIndex]];
swapCount++;
}
console.log(swapCount);
さいごに
このアルゴリズムが最適かわかりません。もっと効率のいい方法があるとは思いますが、いったん全てテストが通ったのでよし。
皆さんはどういった解き方をしているのでしょうか?