【基本情報】コード掲載!科目B問12「文字列同士の類似度を求めるプログラム」について解説

20231111_sample12 資格試験

基本情報の午後試験はプログラム問題です.

科目B問題を解けるようになるにはプログラムを元に自分でコードを書いてみるのが1番良いでしょう.

今回は科目B問12文字列同士の類似度を求めるプログラムの解説とそのコードを紹介します.
プログラムを元にPythonで書き直しました.

Pythonで書いてみたので是非手元で実行してみてください.

サンプル問題 科目B 問12「文字列同士の類似度を求めるプログラム」

問題文は以下のとおりです.
文字列に関する問題ですね.

問12 問題文と回答選択肢|クリックして拡大できます
サンプル問題[科目B]問12 文字列同士の類似度を求めるプログラム

プログラムをPythonで書き直す

問12に掲載されているプログラムを元にPythonで書き直しました.

from typing import List

def simRatio(s1: List[str], s2: List[str]):
    cnt = 0 # カウントの初期値0
    
    if (len(s1) != len(s2)): # s1とs2の文字数が一致しないとき
        return -1 # -1を返す
    
    for i in range(0, len(s1)): # iを0から文字数分だけループする
        if (s1[i] == s2[i]): # s1とs2の文字が一致すれば
            cnt = cnt + 1 # 1つカウントする
            
    return cnt / len(s1) # カウント/文字数

# 比較したい文字列によってコメントを書き換える
s1 = ['a', 'p', 'p', 'l', 'e']
s2 = ['a', 'p', 'p', 'l', 'e']
# s2 = ['a', 'p', 'r', 'i', 'l']
# s2 = ['m', 'e', 'l', 'o', 'n']
# s2 = ['p', 'e', 'n']

print(simRatio(s1, s2))
プログラムの実行結果|クリックして拡大できます

プログラムが正しく実行できるのは「エ」s1[i] == s2[i]です.

ポイントを確認しましょう!

ポイント どんなときにcntに1を足すか考える

このプログラムは配列の要素がどれだけ一致しているか確かめます.

初めに配列の要素数が一致しないときは-1を返します.

if (len(s1) != len(s2)): # s1とs2の文字数が一致しないとき
        return -1 # -1を返す

例えばs1=[‘a’, ‘p’, ‘p’, ‘l’, ‘e’], s2=[‘p’, ‘e’, ‘n’]のとき要素数はそれぞれ5と3なので一致しません.
そのため-1と表示されました.

要素数が一致しないときは-1と表示する|クリックして拡大できます

要素数が一致するとき互いの要素が一致するか確認します.
もし一致すればcntに1を足しその一致率を計算します.

例えばs1=[‘a’, ‘p’, ‘p’, ‘l’, ‘e’], s2 = [‘a’, ‘p’, ‘r’, ‘i’, ‘l’]のように一部の文字列が一致していると計算した結果を返します.

aとpが一致する場合は0.4と表示する|クリックして拡大できます

5つの要素のうち aとpの2つが一致しました.

よって一致率は0.4となります.

要素同士が一致するときにcntに1足すので,答えは「エ」s1[i] == s2[i]と分かります.

まとめ

今回は科目B問12「文字列同士の類似度を求めるプログラム」について紹介しました.

プログラム問題の中では比較的解きやすい問題でしたね.

ただ似たような選択肢ばっかりだったので迷うこともあるかもしれません.
そのときはプログラムの意味を理解しましょう.

このプログラムは文字列の類似度を計算しました.
どんなときにcntに1を足せば文字列の類似度を計算できるのか?

このポイントに気づけると簡単に問題が解けますね!