基本情報技術者試験の科目BをJavaとPythonのプログラムで考える No.22
基本情報技術者試験で出題されるプログラム言語が疑似言語に変更されましたね。合格に向けて学習を進めるにおいては、やはり普段から使っているプログラム言語に置き換えて考えてみたいですよね。
このサイトでは、IPA情報処理推進機構で公開されている科目Bのプログラミングの問題を中心に、疑似言語をJavaとPythonのコードに置き換えて解説していきます。
1日1問の解説を発信していく予定です。基本情報技術者試験の合格を目指されている方のお役に立てれば幸いです。
基本情報技術者試験 科目 B サンプル問題(2022年12月公開)
https://www.ipa.go.jp/shiken/syllabus/henkou/2022/ssf7ph000000h5tb-att/fe_kamoku_b_set_sample_qs.pdf
問12 配列の操作
まずは、何をおこなうプログラムなのかの理解ですね。
関数 simRatioの働きを把握しましょう
与えられた二つの文字型の配列 s1と s2 を比較する
① 要素数が等しい場合
要素番号が同じ要素の文字同士が一致する要素の組みの個数 ÷ s1の要素数
この割り算の答えを返す
② 要素数が等しくない場合
-1 を返す
1.Javaのコードで考えてみよう
package kamokuB;
public class R4_Sample12 {
static double simRatio(String[] s1, String[] s2){
int i, cnt = 0;
if (s1.length != s2.length)
return -1;
for (i = 1; i < s1.length; i++){
if (s1[i] == s2[i])
cnt = cnt + 1;
}
return (double)cnt / (s1.length - 1); // 実数として計算する
}
public static void main(String[] args) {
// テストデータ
// 問題では要素番号は1から始まりますので、
// 要素番号0にはダミーで空文字を設定しています。
String[] s1 = {"", "a", "p", "p", "l", "e"};
String[] s2 = {"", "a", "p", "p", "l", "e"}; //1
// String[] s1 = {"", "a", "p", "p", "l", "e"};
// String[] s2 = {"", "a", "p", "r", "i", "l"}; //0.4
//
// String[] s1 = {"", "a", "p", "p", "l", "e"};
// String[] s2 = {"", "m", "e", "l", "o", "n"}; //0
//
// String[] s1 = {"", "a", "p", "p", "l", "e"};
// String[] s2 = {"", "p", "e", "n"}; //-1
System.out.println(simRatio(s1,s2));
}
}
2.Pythonのコードで考えてみよう
# 2022年12月公開問題12
def sim_ratio(s1, s2):
cnt = 0
if len(s1) != len(s2):
return -1
for i in range(1, len(s1)):
if s1[i] == s2[i]:
cnt += 1
return cnt / (len(s1) - 1) # 実数として計算する
# テストデータ
# 問題では要素番号は1から始まりますので、
# 要素番号0にはダミーで0空文字を設定しています。
s1 = ["", "a", "p", "p", "l", "e"]
s2 = ["", "a", "p", "p", "l", "e"] # 1
# s1 = ["", "a", "p", "p", "l", "e"]
# s2 = ["", "a", "p", "r", "i", "l"] # 0.4
# s1 = ["", "a", "p", "p", "l", "e"]
# s2 = ["", "m", "e", "l", "o", "n"] # 0
# s1 = ["", "a", "p", "p", "l", "e"]
# s2 = ["", "p", "e", "n"] # -1
print(sim_ratio(s1, s2))
いかがでしょうか。
おこなっている処理は複雑なものではありません。
問題文を速く正確に読んで理解することが大事ですね。