【プログラミング苦手な文系必見】文系が教える基本情報技術者試験(FE)アルゴリズム攻略!

資格取得

基本情報のアルゴリズムが難しくてやってられない!

どこからかそんな声が聞こえてきたので、今回この記事を執筆することとなりました。

基本情報技術者試験では、「アルゴリズムとデータ構造」として、プログラムを読んで答える問題がありますが、プログラムを見たことない人・見慣れない人にとっては苦痛も同然!

しかし、あるたった一つのことを意識して行えば、実は「サービス問題」になるんです。

私のバックグラウンドをご紹介した後、さっそく解説へ入りましょう。

Yang
Yang

・文系出身、大学時プログラミング未経験
・東京でIT企業勤務、1年目で開発リーダー
・基本情報技術者試験、応用情報技術者試験を1年以内に合格
・Java Goldも1年目で取得

そもそもアルゴリズムとは?

アルゴリズムの意味が分かりません!

私も最初は本当にそうでした。(某アルゴリズムの運動の歌で聞いたくらい…体操かな?)

アルゴリズムを理解するためには、前提として「プログラミング」を理解する必要があります。

 プログラミングとは、コンピューターに命令を出すことです。
例えば、「こんにちは」と画面に表示させたい時、プログラミング言語を使って、
その命令を書きます。これがプログラミングの第一歩です。

これを踏まえて、アルゴリズムは何かというと、「コンピュータに対する命令文」となります。

「計算の手順書」「料理のレシピ(人間に対する命令文とも解釈できる)」なども広義では「アルゴリズム」になりますね。

コンピュータの中では、直接日本語で「~しろ!」と命令するわけではありません。

数式やプログラミング言語を経由して、コンピュータに命令することができます。

コードも難しく見えるかもしれませんが、結局はすべてコンピュータへの指令、アルゴリズムなのです。

基本情報技術者試験におけるアルゴリズム問題と対策法

結論から言います。

Yang
Yang

プログラムを必ずトレースして確かめろ!!

ね?簡単でしょ…?

トレースとは

トレースの意味が分かりません!

 

トレースの意味は以下です。要は「変数に一つずつ値を代入して動きを確かめる」ことです。

 

トレースとは?…プログラミングやソフトウェア開発の分野では、実行するとエラーや誤った結果を生じるコンピュータプログラムのどこに問題があるか突き止めるために、命令の実行を順番にたどって各段階の状態・状況を確認する作業。
引用:https://x.gd/shxAC

トレースを活かして問題を解いてみる

早速、トレースの使い方を解説しながら、IPAの公式サイトで紹介されているサンプル問題を解いてみましょう!

問1 次の記述中の に入れる正しい答えを,解答群の中から選べ。
プログラムを実行すると,“ ”と出力される。
〔プログラム〕
整数型: x ← 1
整数型: y ← 2
整数型: z ← 3
x ← y
y ← z
z ← x
yの値 と zの値 をこの順にコンマ区切りで出力する。解答群
ア 1,2 イ 1,3 ウ 2,1
エ 2,3 オ 3,1 カ 3,2
この問題の答えとしては「最終的なyとzの値」が要求事項です。
では、トレース=一つずつ変数に値を代入して、プログラムの動きを確かめてみましょう。
x ← y
「←」の意味ですが、これは「xにyを入れる」と覚えてください。変数はいわゆる「箱」だと考えればイメージしやすいと思います。
※プログラム上では、「x=y」と書きますが、これは数学上の「イコール」を表していないので要注意!
問題の前提条件として、x ← 1、y ← 2が示されています。
つまり「xに1を入れる」「yに2を入れる」となります。
よって、「x ← y」は「xにyを入れる」、すなわち「xに2を入れる」となります。

xには1が入っているんだから、「1に2を入れる」になるのでは?

基本的に目標となる変数は、中身ではなく「箱」自体を見てください。
ちなみに、自分自身の変数の値を更新する時は以下のように書きます。

x ← x + 2

さて、現在の状態は「xに2が入っている」「yに2が入っている」「zに3が入っている」状態です。

1回値が代入し終わったら、必ず登場する変数すべての値をメモするようにしてください!(値が変化した変化していないにかかわらず)
y ← z
ここでも同じように考えてみると、「yに3を入れる」となります。
上記が終わると、「xに2」「yに3」「zに3」が入っている状態です。
z ← x
最後も動きとしては変わりません。「zにxを入れる」ですね!
ただし、xは4行目の動作で中身が変更されていることに注意しなければなりません。
以上を踏まえると「zに2を入れる」ということになりますね。
よって、正解はyが3、zが2となり「カ」となります。

トレースのポイントまとめ

最後にトレースのポイントをまとめます。
①「x←y」は「xにyを入れる」という意味。(上書きも可能)
②「x←x+y」は「xに元のxの値とyの値を足したのものを入れる」という意味。
③1回トレースするたびに必ず変数の値をメモしておく(変化の有無にかかわらず)

トレースが上手くできない人向け:実際にコードを書いてみる

トレースが上手くいきません…

実際のところ、なぜ値が変化してくのか、矢印って何の意味があるの?という疑問は拭えません。

原因として最も挙げられるのは、「プログラムの動きそのものが頭にないから」です。

それもそのはず、コードが書けたらこの問題を解くのに苦労はしません。

そんなあなたに「プログラミングスクール」をおすすめします!

コードを書く練習を行えば、必然的にトレースも自然とできるようになります。

さらに、一度プログラミングを学んでしまえば、他のプログラミング言語を学ぶとき、知識がフックとなってかなり学びやすくなります!!

Yang
Yang

私は最初の言語としてJavaを学びましたが、そのおかげでPythonやC++など、他の言語が半分程度の時間で学べるようになりました!

「今後コードを書く機会なんて絶対ないからもったいない…」という方にもおすすめできます。

断言します。今後コードと触れ合う機会が一生ないということは絶対あり得ません。

少なくともExcelのマクロ機能を使ったファイルを触る時点で、コードに少なからず触れます。

先ほども述べた通り、プログラミング言語を一つ学んだだけで、他の言語に応用が利きます。

マクロも例外ではありません(なんならマクロは言語の中では読みやすい)。

プログラミングなんていらない!と決めつける前に、一度学んでみてはいかがでしょうか?

以下、おすすめのプログラミングスクールです。

科目Bおすすめの参考書

おススメの参考書は以下の記事にまとめています。ぜひ参考にしてみてください!