2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

私はこれまでC・Bランクを解いてきました。計算方法は気にせず自分の思うように解けるので難しい印象はありませんでした。
しかし、Aランクから一筋縄ではいかない様子。

特に「本の整理」問題はアルゴリズムを使用しなければいけないようです。

ということで、挑戦してみました。※問題文はURLから確認してください。

解き方

結論、「選択ソート」を使用しました。
配列の先頭から順番に最小の要素を選び、並び替えていくアルゴリズムです。

  1. for文にそって比較の元になるインデックスを決めていきます。ここではminIndexと表現しています
  2. そこから値を比較し、より小さい値があるか精査します。もしあった場合、最小値のインデックスが変わるので、minIndexを更新します
  3. 最終的には元インデックスと最小インデックスにある値を入れ替えます
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);

さいごに

このアルゴリズムが最適かわかりません。もっと効率のいい方法があるとは思いますが、いったん全てテストが通ったのでよし。

皆さんはどういった解き方をしているのでしょうか?

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?