ITパスポート 2024年 問62
問題文
関数convertは、整数型の配列を一定のルールで文字列に変換するプログラムである。関数convertをconvert(arrayInput)として呼び出したときの戻り値が“AABAB“になる引数arrayInputの値はどれか。ここで、arrayInputの要素数は1以上とし、配列の要素番号は1から始まる。
〔プログラム〕
○文字列型: convert(整数型の配列: arrayInput)
文字列型: stringOutput ← ”” //空文字列を格納
整数型: i
for (iを1からarrayInputの要素数まで1ずつ増やす)
if (arrayInput[i]が1と等しい)
stringOutputの末尾に“A“を追加する
else
stringOutputの末尾に“B“を追加する
endif
endfor
return stringOutput
選択肢
ア:{0, 0, 1, 2, 1}
イ:{0, 1, 2, 1, 1}
ウ:{1, 0, 1, 2, 0}
エ:{1, 1, 2, 1, 0}(正解)
🔒 解説は解答すると表示されます
配列要素の条件変換【ITパスポート解説】
正解の理由
配列の各要素を左から順に調べ、要素が数値の1と等しいときだけ文字 "A" を末尾に追加し、それ以外は "B" を追加します。選択肢の {1, 1, 2, 1, 0} をこのルールで処理すると、順に 1→A、1→A、2→B、1→A、0→B となり、結果の文字列は "AABAB" になります。よって本問の正解は エ です。
解法ステップ
- 配列を先頭から順に見る(この問題では要素番号は1から始まると指定されています)。
- 各要素が整数の1と等しいかを判定する。
- 等しければ "A" を出力文字列の末尾に追加。
- 等しくなければ "B" を追加。
- 全要素を処理し終えたら、その文字列を返す。
- 与えられた選択肢それぞれについて上の手順で結果の文字列を作り、目的の "AABAB" と一致するものを選ぶ。
選択肢別の誤答解説
-
ア: {0, 0, 1, 2, 1}
各要素を順に判定すると 0→B、0→B、1→A、2→B、1→A で、結果は "BBABA" になります。よって "AABAB" とは異なります。 -
イ: {0, 1, 2, 1, 1}
0→B、1→A、2→B、1→A、1→A で "BABAA" になります。目的の文字列とは違います。 -
ウ: {1, 0, 1, 2, 0}
1→A、0→B、1→A、2→B、0→B で "ABABB" になります。合いません。 -
エ: {1, 1, 2, 1, 0}
1→A、1→A、2→B、1→A、0→B で "AABAB" となり、問題の条件を満たします(これが正解)。
よくある誤解
-
配列の要素番号が1から始まる点を見落とす
多くのプログラミング言語は配列の先頭を0番目としますが、この問題文では1始まりと明記されています。ここを0始まりだと誤解すると要素の対応がずれます。 -
「1かどうか」を真偽(truthy)で判断してしまう
数字の1とそれ以外を区別する必要があります。0や2は「1ではない」ので必ず "B" です。言語によっては真偽値と混同しやすいので注意してください。 -
途中で文字列を置き換える誤り
「追加(末尾に追加)」がルールです。既にある文字を上書きすると長さや順序が変わって間違えます。
補足コラム
この処理は配列の長さ に対して1回ずつ要素を調べるだけなので、処理時間は要素数に比例します。これを「線形時間」や記法で (読み:オー・エヌ)と言います。読み方の補足: は「入力サイズ n に比例して増える量」を表す簡単な目安です。
簡単な実装例(Python):
def convert(array_input):
string_output = ""
for x in array_input: # Pythonは0始まりだが順に処理するだけなら問題なし
if x == 1:
string_output += "A"
else:
string_output += "B"
return string_output
print(convert([1,1,2,1,0])) # 出力: AABAB
FAQ
Q. 要素が文字列の "1" だったらどうなる?
A. 問題文は「整数型の配列」としているため数値として扱います。実際のプログラムでは型が違えば等価比較が通らないので、型変換が必要になることがあります(言語依存)。
A. 問題文は「整数型の配列」としているため数値として扱います。実際のプログラムでは型が違えば等価比較が通らないので、型変換が必要になることがあります(言語依存)。
Q. 配列の長さが変わるとどうなる?
A. 変わった長さ分だけ出力文字列も長くなります。要素ごとに1文字が追加されるルールだからです。
A. 変わった長さ分だけ出力文字列も長くなります。要素ごとに1文字が追加されるルールだからです。
Q. なぜ選択肢アは "BBABA" になるのか分かりません。
A. 各要素を順に見て、1のときだけ A、それ以外は B を追加します。アの場合は {0,0,1,2,1} → B B A B A の順に追加されるため "BBABA" です。
A. 各要素を順に見て、1のときだけ A、それ以外は B を追加します。アの場合は {0,0,1,2,1} → B B A B A の順に追加されるため "BBABA" です。
関連キーワード: 配列、条件分岐、文字列生成、線形時間、1始まりインデックス、等価比較

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

