基本情報の午後試験はプログラム問題です.
科目B問題を解けるようになるにはプログラムを元に自分でコードを書いてみるのが1番良いでしょう.
今回は科目B問12「文字列同士の類似度を求めるプログラム」の解説とそのコードを紹介します.
プログラムを元にPythonで書き直しました.
Pythonで書いてみたので是非手元で実行してみてください.
サンプル問題 科目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と表示されました.
要素数が一致するとき互いの要素が一致するか確認します.
もし一致すればcntに1を足しその一致率を計算します.
例えばs1=[‘a’, ‘p’, ‘p’, ‘l’, ‘e’], s2 = [‘a’, ‘p’, ‘r’, ‘i’, ‘l’]のように一部の文字列が一致していると計算した結果を返します.
5つの要素のうち aとpの2つが一致しました.
よって一致率は0.4となります.
要素同士が一致するときにcntに1足すので,答えは「エ」s1[i] == s2[i]と分かります.
まとめ
今回は科目B問12「文字列同士の類似度を求めるプログラム」について紹介しました.
プログラム問題の中では比較的解きやすい問題でしたね.
ただ似たような選択肢ばっかりだったので迷うこともあるかもしれません.
そのときはプログラムの意味を理解しましょう.
このプログラムは文字列の類似度を計算しました.
どんなときにcntに1を足せば文字列の類似度を計算できるのか?
このポイントに気づけると簡単に問題が解けますね!