新らしくなった基本情報 科目 B 20問バージョン アルゴリズムとプログラミング サンプル問題11をJavaにしてみました

2023 年 4 月からIPA (独立行政法人情報処理推進機構)の基本情報技術者試験の制度が変更されました。

ここでは、「基本情報技術者試験 科目 B のサンプル問題20問バージョン」の中から、アルゴリズムとプログラミングの問題を取り上げ、Javaのソースコードを示します。

新人エンジニア研修に参加されている皆様の参考になれば幸いです。

【Javaプログラム】

public class Q11 {
    //本問で問われている関数
    public static int[] binSort(int[] data) {
        int n = data.length;
        //      Javaの配列が0始まりのため左端の要素にダミーの0を補っている
        //      未定義を表現するために要素に-1を入れている
        int[] bins = { 0, -1, -1, -1, -1, -1, -1 };
        int i;

        for (i = 1; i < n; i++) {
            bins[data[i]] = data[i];
        }
        return bins;
    }

    public static void main(String[] args) {
        //        Javaの配列が0始まりのため左端の要素にダミーの0を補っている
        int[] data = { 0, 2, 6, 3, 1, 4, 5 };
        //        以下は正解選択肢の表示のための処理
        int[] bindata = binSort(data);
        for (int i = 0; i < bindata.length; i++) {
            System.out.print(bindata[i]);
        }
        System.out.println();
        //        以下は不正解の選択肢の例として(イ)の表示のための処理
        int[] datai = { 0, 3, 1, 4, 4, 5, 2 };
        bindata = binSort(datai);
        for (int i = 0; i < bindata.length; i++) {
            System.out.print(bindata[i]);
        }
    }
}

【結果】

0123456
012345-1

【プログラムの解説】

このJavaプログラムは、バケットソート(bin sort)アルゴリズムを実装しています。

まず、public static void main(String[] args) メソッドで、2つの整数配列 datadatai を定義し、それぞれに整数値を格納しています。

data 配列の要素は、0を補って { 0, 2, 6, 3, 1, 4, 5 } となっています。

配列 datai の要素は、不正解の選択肢として与えられているため、ランダムな整数値が含まれています。

次に、binSort() メソッドが定義されています。

このメソッドは、引数で与えられた整数配列 data をバケットソートアルゴリズムでソートし、ソートされた配列 bins を返します。

バケットソートアルゴリズムでは、まず、各要素の値に対応するバケットを用意します。

このプログラムでは、7個のバケットを表す配列 bins を定義しています。そのうち、0番目の要素はダミーの0であり、1番目から6番目の要素が各要素の値を表現しています。

バケットソートでは、各要素を対応するバケットに振り分けることで、ソートを行います。

メソッド内の for ループでは、data 配列の各要素に対して、その値に対応するバケットに要素を挿入しています。

つまり、例えば data[1] の値が2である場合、bins[2] の値に2が格納されます。

main() メソッドでは、まず data 配列に対して binSort() メソッドを呼び出し、その結果を bindata 配列に代入しています。

そして、 bindata 配列をループで処理し、ソートされた結果を表示しています。

同様に、不正解の選択肢(イ)に対しても、同様の処理を行い、ソートされていない結果を表示しています。