[基本情報技術者試験]アルゴリズムとデータ構造は難しい?捨てる事はできる?

基本情報技術者試験の午後試験の必修科目の一つに、アルゴリズムとデータ構造があります。
この科目は特にプログラミング的思考が苦手な方には難しく、大きな壁となっています。
その結果

と、捨てて別科目を頑張って点を稼ごうとする人もよく見られます。
しかし、このアルゴリズムとデータ構造を捨ててしまうとどうなるかについて見てみましょう。
本記事のまとめ!
- 基本情報においてアルゴリズムとデータ構造は重要論点!
- 必須科目であるため捨てることもできない
- 対策するならスタディングがおすすめ!
基本情報のアルゴリズム問題について
そもそも、基本情報のアルゴリズム問題はどのような傾向なのか、難しいのかどうかについて見てみましょう。
傾向
基本情報のアルゴリズム問題の傾向は以下のようになっています。
まず出題傾向を見てみましょう。過去10回分は以下のような内容になっています。
年度 | 内容 |
R1秋期 | Bitap法を用いた文字列探索 |
H31春期 | ハフマン符号化を用いた文字列圧縮 |
H30秋期 | 整数式を受け取って値を返すプログラム |
H30春期 | ヒープソート |
H29秋期 | 文字列の誤り検出 |
H29春期 | 最短経路探索問題 |
H28秋期 | 編集処理 |
H28春期 | メモ帳機能 |
H27秋期 | BM法を用いた文字列探索 |
H27春期 | クイックソート |
このように文字列を操作したり順番を入れ替えたりといった処理が多くなっています。
例題
アルゴリズムの問題は人によって受け取り方は違うものの、具体的な問題を1つ見て見るとどのような感じかわかるかなと思います。
今回は令和元年度秋の問題を一部抜粋して引用してみました。
次のプログラムの説明及びプログラムを読んで,設問1~3に答えよ。
〔プログラムの説明〕
関数 BitapMatch は,Bitap法を使って文字列検索を行うプログラムである。
Bitap法は,検索対象の文字列(以下,対象文字列という)と検索文字列の照合に,個別の文字ごとに定義されるビット列を用いるという特徴をもつ。
なお,本問では,例えば2進数の16ビット論理型の定数 0000000000010101 は,上位の0を省略して”10101″Bと表記する。(1)関数 BitapMatch は,対象文字列を Text[] に,検索文字列を Pat[] に格納して呼び出す。配列の要素番号は1から始まり,Text[] のi番目の文字は Text[i] と表記する。Pat[] についても同様にi番目の文字は Pat[i] と表記する。対象文字列と検索文字列は,英大文字で構成され,いずれも最長16文字とする。
対象文字列 Text[] が”AACBBAACABABAB”,検索文字列 Pat[] が”ACABAB”の場合の格納例を,図1に示す。
(2)関数 BitapMatch は,関数 GenerateBitMask を呼び出す。
関数 GenerateBitMask は,文字”A”~”Z”の文字ごとに,検索文字列に応じたビット列(以下,ビットマスクという)を生成し,要素数26の16ビット論理型配列 Mask[] に格納する。Mask[1] には文字”A”に対するビットマスクを,Mask[2] には文字”B”に対するビットマスクを格納する。このように Mask[1]~Mask[26] に文字”A”~”Z”に対応するビットマスクを格納する。
関数 GenerateBitMask は,Mask[] の全ての要素を”0″Bに初期化した後,1以上で Pat[] の文字数以下の全てのiに対して,Pat[i] の文字に対応する Mask[] の要素である Mask[Index(Pat[i])] に格納されている値の,下位から数えてi番目のビットの値を1にする。
関数 Index は,引数にアルファベット順でn番目の英大文字を設定して呼び出すと,整数n(1≦n≦26)を返す。(3)図1で示した,Pat[] が”ACABAB”の例の場合,関数 GenerateBitMask を実行すると,Mask[] は図2のとおりになる。
(4)関数 GenerateBitMask の引数と返却値の仕様は,表1のとおりである。
設問1 プログラムの説明およびプログラム1中の□に入れる正しい答えを、解答群の中から選べ
aに関する解答群
ア:0000000000000101 イ:0000000000101000
ウ:0001010000000000 エ:1010000000000000bに関する解答群
ア:”0″B
イ:”1″B
ウ:”1″BをPatLenビットだけ論理左シフトした値
エ:”1″Bを(PatLen-1)ビットだけ論理左シフトした値
オ:”1111111111111111″Bcに関する解答群
ア:”1″Bを(i-1)ビットだけ論理左シフトした値
イ:”1″Bをiビットだけ論理左シフトした値
ウ:”1″Bを(PatLen-1)ビットだけ論理左シフトした値
エ:”1″BをPatLen ビットだけ論理左シフトした値
オ:”1″B〔関数 BitapMatch の説明〕
(1)Text[] と Pat[] を受け取り,Text[] の要素番号の小さい方から Pat[] と一致する文字列を検索し,見つかった場合は,一致した文字列の先頭の文字に対応する Text[] の要素の要素番号を返し,見つからなかった場合は,-1を返す。
(2)図1の例では,Text[7]~Text[12] の文字列が Pat[] と一致するので,7を返す。
(3)関数 BitapMatch の引数と返却値の仕様は,表2のとおりである。
引用元:https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2019h31_2/2019r01a_fe_pm_qs.pdf
疑似コードの読解が難しい
問題を見てぱっと目に入るのが疑似コードと呼ばれる■や▲を用いたプログラミングコードのようなものではないでしょうか。
これらは独特の処理になり、通常のプログラミング言語とは別として覚えておかなければいけません。
複雑な処理が多く頭で追って言っても途中で分からなくなり挫折するパターンが良く見られます。
加えてビットの論理処理や配列なども出てくるため、コンピュータ内のCPUの処理が頭に入っていないと全く解けないことも多々あります。

このあたりがアルゴリズムは難解だと言われる理由です。
基本情報のアルゴリズムを捨てるとどうなる?
それでは、このアルゴリズムが難しいからと言って捨ててしまうとどうなるでしょうか。
25点を失う
まず、アルゴリズムとデータ構造の配点を見てみましょう。
問 | 分野 | 選択方法 | 配点 |
1 | 情報セキュリティ | 必須 | 20点 |
2~4 | ソフトウェア・ハードウェア データベース ネットワーク |
2~5の中から2問 | 15点 |
5 | プロジェクトマネジメント サービスマネジメント システム戦略 経営戦略 企業と法務 |
15点 | |
6 | データ構造とアルゴリズム | 必須 | 25点 |
7~11 | ソフトウェア開発(C言語、Java、Python、アセンブラ、表計算) | 7~11の中から1問 | 25点 |
令和2年度より配点基準が変わり、データ構造とアルゴリズムは25点満点となっています。
このため、100点満点の試験が75点満点の試験となり、そのうち60点以上を取る必要が出てきます。
残り15点しか落とせないので非常に難しいですね。
プログラミングで高得点を取らなければいけなくなる
アルゴリズム問題と同じ25点の配点があるソフトウェア開発(プログラミング)でも、最低で15点以上取る必要が出てきます。
ただ、このプログラミングも基本的な考え方はアルゴリズムと同じで、アルゴリズムが苦手、という方は大抵プログラミングも苦手です。
その結果、両方取れなくて詰むパターンが非常に多いです。
もちろんそれ以外の科目も高得点を狙わなければいけない
もちろん、アルゴリズムやプログラミング以外の科目でも高得点を狙う必要が出てきます。
例えばセキュリティやネットワーク、データベースなどのテクノロジ系科目はほぼ100%正解できるようにしておかなければいけません。
テクノロジ系科目は決して難しくはありませんが、100%を取るとなると話は変わってきます。
勉強時間も従来の150時間~200時間よりかかる事を覚悟しておいた方が良いでしょう。

アルゴリズムを対策するために
では具体的にアルゴリズム問題を解けるようにするにはどうすれば良いでしょうか。
具体的な3つの方法をご紹介します。
ソフトウェア開発と並行して学習する
まず一つ目が、選択必修科目であるソフトウェア開発(7~11問目)と同時に対策することです。
先ほども少し触れましたが、アルゴリズムとデータ構造及び、ソフトウェア開発ではともにプログラミング的思考が問われ、片方が対策できればもう片方もそれなりに理解できます。
なので、ソフトウェア開発の問題を解きながら、「これは疑似コードだとこのように書くんだな」と、頭の中で置き換えたりしながら学習を進めていくと良いでしょう。
ソフトウェア開発(プログラミング)の対策記事は以下にまとめているので、こちらもあわせてご覧ください。

スクールを利用する
プログラミング・アルゴリズム以外の分野は意外と独学でも通用しますが、逆にこの2つの科目は独学では難しい場合があります。
そんなときの対策の一つとしてスクール・通信講座の利用をおすすめします。
スクールでは講師の方に直接質問を投げることで具体的な解説をしてもらうことができて、最後まで「分からない状態」を残さずに済みます。
基本情報技術者試験の対策講座は多いですが、特に以下の2社がおすすめです。
BizLearn
BizLearnは講師とマンツーマンでレッスンを受けられる手厚いサポートが魅力の通信講座です。
アルゴリズムはもちろん、午後試験の各プログラミング言語に対する講義も受講できるので、表計算以外の言語で臨みたいという方にもおすすめです。
午前免除試験も受けられて4万円以内に納まるため、大手予備校を受けるよりもコスパが良いと言えます。
BizLearnの講座について、詳しく知りたい方は以下の記事もあわせてご覧ください。
スタディング
スタディングは受講料をかなり抑えられておすすめです。
1回1回の動画が短く、高速でインプット・アウトプットを繰り返せるので記憶の定着が早いです。
スマホ1台で受講・問題演習ができるので通勤中・休憩時間などのスキマ時間で勉強できます。
もちろん、午後試験に対しても対策講座が作りこまれておりアルゴリズムやプログラミングも効率よく学習できますよ♪
スタディングのレビュー記事もあるので、あわせてご覧ください。
応用情報に逃げる
意外!と思われるかもしれませんが、応用情報技術者試験に逃げるのも一つの手です。

確かに、応用情報技術者試験は基本情報より遥かに難しい試験とされています。
しかし、応用情報技術者試験の大きな特徴としてプログラミングを避けることができます。
このことにより、記述さえ対策してしまえば応用情報の方がすんなりと合格できてしまう事もあります。
筆者自身、プログラミングが苦手で応用から挑んで先に合格してしまった経験があるのでおすすめです。

基本情報技術者試験のアルゴリズム・まとめ
本記事のまとめ!
- 基本情報においてアルゴリズムとデータ構造は重要論点!
- 必須科目であるため捨てることもできない
- 対策するならスタディングがおすすめ!
今回は基本情報技術者試験のアルゴリズム問題について、難しいのかどうかと言ったポイントと、捨てたらどうなるの?と言った疑問にお答えしました。
答えとしては「しっかり対策する」のが王道パターンで、そのためにしっかりと対策を練ったりスクールを選んだりして早め早めの内に苦手意識を拭い去ることをおすすめしています。
また、基本情報技術者試験を飛ばして応用情報技術者試験にチャレンジするのも大いにアリなので、早めに見切りをつけて応用情報にシフトするのも賢明かもしれません。


福井県産。北海道に行ったり新潟に行ったりと、雪国を旅してます。
経理4年/インフラエンジニア7年(内4年は兼務)/ライター5年(副業)
簿記2級/FP2級/応用情報技術者/情報処理安全確保支援士/中小企業診断修得者 など
ディスカッション
コメント一覧
まだ、コメントがありません