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

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

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

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

【Javaプログラム】

public class Q12 {
    //本問で問われている関数
    public static double simRatio(char[] s1, char[] s2) {
        int i, cnt = 0;
        if (s1.length != s2.length) {
            return -1;
        }
        for (i = 0; i < s1.length; i++) {
            if (s1[i] == s2[i]) {
                cnt = cnt + 1;
            }
        }
        return (double) cnt / s1.length;
    }

    //以下はテスト
    public static void main(String[] args) {

        char[] s1 = { 'a', 'p', 'p', 'l', 'e' };
        char[] s2 = { 'a', 'p', 'p', 'l', 'e' };

        double rval = simRatio(s1, s2);
        System.out.println(rval);

        char[] s3 = { 'a', 'p', 'r', 'i', 'l' };
        rval = simRatio(s1, s3);
        System.out.println(rval);

        char[] s4 = { 'm', 'e', 'l', 'o', 'n' };
        rval = simRatio(s1, s4);
        System.out.println(rval);

        char[] s5 = { 'p', 'e', 'n' };
        rval = simRatio(s1, s5);
        System.out.println(rval);

    }
}

【結果】

1.0
0.4
0.0
-1.0

【プログラムの解説】

このプログラムは、2つの文字列がどれだけ似ているかを表す相関係数を計算する simRatio() 関数を定義し、それをテストするためのものです。

simRatio() 関数は、2つの文字列 s1s2 を受け取り、以下の手順で相関係数を計算します。

  1. s1s2 の長さが異なる場合、-1 を返します。
  2. s1s2 の要素を順番に比較し、一致する要素があるたびに cnt を1ずつ増やします。
  3. cnts1 の長さで割った値を相関係数として返します。

main() メソッドでは、simRatio() 関数をテストするために、いくつかの文字列の組み合わせで simRatio() を呼び出しています。

  1. 文字列 "apple" と "apple" を比較して、相関係数を表示します。
  2. 文字列 "apple" と "april" を比較して、相関係数を表示します。
  3. 文字列 "apple" と "melon" を比較して、相関係数を表示します。
  4. 文字列 "apple" と "pen" を比較して、相関係数を表示します。

このプログラムは、文字列比較による類似度の計算方法を理解する手助けになるでしょう。また、配列の要素を順番に処理する方法についても学ぶことができます。