HOME»基本情報技術者試験掲示板»令和6年公開問題科目Bアルゴリズム時短テク?
投稿する
令和6年公開問題科目Bアルゴリズム時短テク? [5619]
まーぼさん(No.1)
★FE シルバーマイスター
令和6年公開問題科目Bのアルゴリズム(https://www.fe-siken.com/s/kakomon/06_haru/)の問題をできるだけトレースせずに解く方法を書いていきます。はっきり言って、この解法は邪道だと思います。正攻法はやはり着実にトレースすることです。しかし、科目Bで、「時間が足りない」という意見があることも事実で、どれだけ短時間で正答のめぼしがつけられるかも重要だと思っています。時間が足りない中でも答えを導き出せる可能性がある、という精神的な余裕ができれば、合格する可能性も高くなる、そう考えてこのスレッドを立てています。
はじめに、科目Bの問題を解く上で私が有効だと思ったアプローチを紹介します。それは、「おんなじさがし」と「まちがいさがし」です。科目Bの選択肢には似ているけど微妙に違う、そんな選択肢が多いように感じました。選択肢の同じところ、選択肢の違うところを確認するだけで、問題の作成者が何を問うているかが分かりやすくなると思います。
この方法をやってみるかは見ている人次第なので、この方法で点数が下がっても自己責任です。私は責任は取れませんので、予めご了承ください。
はじめに、科目Bの問題を解く上で私が有効だと思ったアプローチを紹介します。それは、「おんなじさがし」と「まちがいさがし」です。科目Bの選択肢には似ているけど微妙に違う、そんな選択肢が多いように感じました。選択肢の同じところ、選択肢の違うところを確認するだけで、問題の作成者が何を問うているかが分かりやすくなると思います。
この方法をやってみるかは見ている人次第なので、この方法で点数が下がっても自己責任です。私は責任は取れませんので、予めご了承ください。
2024.09.25 18:03
まーぼさん(No.2)
★FE シルバーマイスター
問1は基礎的な問題なので飛ばします。要望があれば追記します。
問2 2進数を10進数に変換するプログラム
・おんなじさがし
選択肢ウ,エはresultに2を乗算している
選択肢ア,ウはintの中身が(length - i + 1)文字になっている
以上から、この問題は「resultに2を乗算するべきか?」、「intの中身はi文字目か?それとも(length - i + 1)文字目か?」の2つの小問題に分解できる。
まず、「resultに2を乗算するべきか?」については、このプログラムがそもそも、2進数関連のプログラムなので2は関係してきそうなので、今のところはウ,エが優勢。
次に、「intの中身はi文字目か?それとも(length - i + 1)文字目か?」については、文字列の最初の文字からやるか最後からやるかの違い。ウは最後の文字の方が、エは最初の文字の方が、2が乗算される回数が多い。これは10010という2進数の文字列を10進数に変換してみれば分かるが、最初の1は2^4で、最後の1は2^1で、当然2^4の方が2が乗算される回数が多い。ということは、最初の文字の方が2が乗算される回数が多くなるべきなので、答えはエ。
問2 2進数を10進数に変換するプログラム
・おんなじさがし
選択肢ウ,エはresultに2を乗算している
選択肢ア,ウはintの中身が(length - i + 1)文字になっている
以上から、この問題は「resultに2を乗算するべきか?」、「intの中身はi文字目か?それとも(length - i + 1)文字目か?」の2つの小問題に分解できる。
まず、「resultに2を乗算するべきか?」については、このプログラムがそもそも、2進数関連のプログラムなので2は関係してきそうなので、今のところはウ,エが優勢。
次に、「intの中身はi文字目か?それとも(length - i + 1)文字目か?」については、文字列の最初の文字からやるか最後からやるかの違い。ウは最後の文字の方が、エは最初の文字の方が、2が乗算される回数が多い。これは10010という2進数の文字列を10進数に変換してみれば分かるが、最初の1は2^4で、最後の1は2^1で、当然2^4の方が2が乗算される回数が多い。ということは、最初の文字の方が2が乗算される回数が多くなるべきなので、答えはエ。
2024.09.25 18:04
まーぼさん(No.3)
★FE シルバーマイスター
問3 隣接行列に変換するプログラム
正直これについては、隣接行列[i,j] = 1ならば、隣接行列[j,i] = 1になることを知っていた。たとえ知らなくても、この性質には気づけると思う。
「隣接行列[i,j] = 1ならば、隣接行列[j,i] = 1」この性質を満たすような擬似言語は、エ。
正直これについては、隣接行列[i,j] = 1ならば、隣接行列[j,i] = 1になることを知っていた。たとえ知らなくても、この性質には気づけると思う。
「隣接行列[i,j] = 1ならば、隣接行列[j,i] = 1」この性質を満たすような擬似言語は、エ。
2024.09.25 18:04
まーぼさん(No.4)
★FE シルバーマイスター
問4 マージソートの実行回数を求める
この問題は単純で、マージソートの一つのブロックの実行回数を求める問題。
マージソートの動きを知っていれば、擬似言語の3つのwhileブロックが、それぞれ
「どちらかの配列の要素がなくなるまでマージ作業をするブロック」
「マージの際、配列1の要素が余ったときwork配列に配列1の残りの要素を転記するブロック」
「マージの際、配列1の要素が余ったときwork配列に配列1の残りの要素を転記するブロック」
ということが分かると思う。
実際にマージソートの手順を手作業でやると、配列2の要素が1つ余る。配列2の要素を1つwork配列に転記するので、αの実行回数は1回。
この問題は単純で、マージソートの一つのブロックの実行回数を求める問題。
マージソートの動きを知っていれば、擬似言語の3つのwhileブロックが、それぞれ
「どちらかの配列の要素がなくなるまでマージ作業をするブロック」
「マージの際、配列1の要素が余ったときwork配列に配列1の残りの要素を転記するブロック」
「マージの際、配列1の要素が余ったときwork配列に配列1の残りの要素を転記するブロック」
ということが分かると思う。
実際にマージソートの手順を手作業でやると、配列2の要素が1つ余る。配列2の要素を1つwork配列に転記するので、αの実行回数は1回。
2024.09.25 18:05
まーぼさん(No.5)
★FE シルバーマイスター
問5 商品注文の関連度を求めるプログラム
正直、問題も擬似言語も見るのがうんざりするくらい長ったらしいが、こういうときこそ、「おんなじさがし」や「まちがいさがし」の出番だと思う。
この問題は、要は問題の中盤にある式を擬似言語で表すとどうなる?ということ。この式と擬似言語を対応させることを目的にする。
・まちがいさがし
ア、イ、ウはaがarrayK[i]でエ、オ、カはarrayM[i]で対称的になっている。
擬似言語の部分のaとbの違いはifの入れ子になっているかどうか。
ifの入れ子がand条件のように働くことを理解していれば、MとKどちらがand条件に相応しいかを選べればいいと思う。
Mは、「商品Xと商品Yが同一の注文で購入された注文数」
Kは、「商品Xが購入された注文数」だと問題文から分かるので、”同一の注文”と”and条件”が対応していることが分かれば、エ、オ、カのどれかということが分かると思う。
式と擬似言語を対応させると、cには全注文数に対応するものが入る。全注文数に対応するのは、ordersの要素数なので、オが答え。
正直、問題も擬似言語も見るのがうんざりするくらい長ったらしいが、こういうときこそ、「おんなじさがし」や「まちがいさがし」の出番だと思う。
この問題は、要は問題の中盤にある式を擬似言語で表すとどうなる?ということ。この式と擬似言語を対応させることを目的にする。
・まちがいさがし
ア、イ、ウはaがarrayK[i]でエ、オ、カはarrayM[i]で対称的になっている。
擬似言語の部分のaとbの違いはifの入れ子になっているかどうか。
ifの入れ子がand条件のように働くことを理解していれば、MとKどちらがand条件に相応しいかを選べればいいと思う。
Mは、「商品Xと商品Yが同一の注文で購入された注文数」
Kは、「商品Xが購入された注文数」だと問題文から分かるので、”同一の注文”と”and条件”が対応していることが分かれば、エ、オ、カのどれかということが分かると思う。
式と擬似言語を対応させると、cには全注文数に対応するものが入る。全注文数に対応するのは、ordersの要素数なので、オが答え。
2024.09.25 18:06