なんとなく出来る時もあるけど、行き当たりばったりはまずいよな。。
事前に対策できることがあったら知りたい!
アルゴリズムって基本情報午後問題の中でも特に難しいですよね。
必須問題だし、2020年度から配点も上がっているので、捨てるのも厳しいですね。。
本記事ではアルゴリズムを解く前に準備できる対策を紹介していきます。
- 事前に準備できること
- どんな問題がでるのか
- 点数をとるために必要なこと
アルゴリズム問題を解くにもある程度知識が必要です。
これを知っていれば時間短縮や問題の理解につながる、というものを紹介します。
疑似言語の記述形式を覚える
問題用紙に形式は記載されているので覚えずに臨んでも、解けないことはありませんが、
時間のロスになるので、覚えていくことがベターです。
Java等のコンピュータ言語を少しでもかじっていれば、
基本は同じなので、特に負担にはならないと思います。
if文にあたる形式と、for文やwhile文にあたる形式が
混同しやすいので、しっかり覚えましょう。
▲条件式
|処理
▼
条件式が真のとき処理を実行する
▲条件式
|処理1
╋ーーーー
|処理2
▼
条件式が真のときは処理1を実行し、
偽のときは処理2を実行する
■条件式
|処理
■
条件式が真の間、処理を繰り返し実行する
■
|処理
■条件式
処理を実行し、条件式が真の間、処理を繰り返し実行する
■変数:初期値、条件式、増分
|処理
■
開始時点で変数に初期値(式で与えられる)が格納され、条件式が真の間、処理を繰り返す。
また、繰り返すごとに変数に増分(式で与えられる)を加える。
どんな問題が出るか知っておく
どんな問題がでるのか傾向を知っておくことは、どんな試験の対策にも必須ですね。
問題の傾向がわかれば、本番で問題の意味を捉えやすくなり、解答のスピードがあがります。
アルゴリズムでは大きく2つの種類の問題が出ます。
- プログラムの穴埋め
- 変数の値を問う
順に説明します。
プログラムの穴埋め
出題されるプログラムの空欄にあてはまる条件や処理を答える問題です。
例)令和元年秋期 問8 設問1
[プログラム1]
○整数型関数:GenerateBitMask(文字型:Pat[ ],16ビット論理型:Mask[ ])
○整数型:i,PatLen
・PatLen ← Pat[ ]の文字数
■ i:1,i ≦ 26,1
|
|・Mask[ i ] ← ( b ) /*初期化*/
|
■
■ i:1,i ≦ PatLen,1
|
|・Mask[Index(Pat[ i ])] ←( c )とMask[Index(Pat[ i ])]とのビットごとの論理和
|
■
・return(PatLen)
設問1
プログラムの説明及びプログラム1中の()に入れる正しい答えを解答群の中から選べ
この種類の問題では、問題文を読み、プログラムで何をしようとしているか、目的を正確に把握する必要があります。
また、この問題はできるだけ正解したいところ。
なぜかというと、この問題を正しく穴埋めしたという前提で問題が続いていくためです。
わからないからといって適当に解答してしまうと、その後も誤答してしまう可能性が高くなってしまいます。
時間がかかってもいいので、確実に正解しましょう。
例)令和元年秋期 問8 設問3
関数GenerateBitMaskの拡張にかんする、次の記述中の()に入れる正しい答えを、解答群の中から選べ。ここで、プログラム3中の(b)には設問1の(b)の正しい答えが入っているものとする。
変数の値を問う
この種類の問題がアルゴリズム問題の代名詞であり、一番難しい問題です。
プログラムの途中もしくは最後の変数の値がどうなっているかを選択する問題です。
変数の値を追いながら、プログラムを正確に進める能力が必要になってきます。
例)令和元年秋期
設問3
Pat[ ]に"AC[BA]A[ABC]A"を格納して、関数GenerateBitMaskRegexを呼び出した場合を考える。この場合、文字"A"に対応するビットマスクであるMask[ 1 ]は( g )となり、関数GenerateBitMaskRegexの返却値は( h )となる。また、Pat[ ]に格納する文字列中において[ ]を入れ子にすることはできないが、誤ってPat[ ]に"AC[B[AB]AC]A"を格納して関数GenerateBitMaskRegexを呼び出した場合、Mask[ 1 ]は( i )となる。
基本的なプログラムを覚える
アルゴリズム問題で出題されるプログラムには必ず何かしらやりたいこと、目的があります。
例えば、文字を並べ換えたり、文字列を検索したり等々
バブルソートや線形探索といった、基本的なプログラムを応用していることが多いです。
そのため、基本的なプログラムを知ることは、アルゴリズム問題を解くうえで役に立つ知識になるはずです。
この基本的なプログラムを勉強する時に役立つアプリを一つ紹介します。
「アルゴリズム図鑑」
超おすすめです!
1処理ずつアニメーションによって説明してくれるのが感覚的にわかりやすいです。
無料版もあるので、一度ためしてみてください!
変数の値を追えるようにする
アルゴリズム問題の一番の肝ですね。
上で紹介したように、ある時の変数の値を問われる問題が多く出題されますが、
これを解けるようになるには、変数の値を追えるようになることが必要です。
変数の値を追うってどういうことだよって感じですが、
地道にプログラムを一行ずつ進めていくことにより、変数に値が代入されていくのを確認していく
という感じですね。
この問題を解くのに必勝法や裏技のようなものはないです。
とにかくたくさん過去問を解いて、変数の値を追うことに慣れましょう。
自分にあった解き方をみつけ、コツをつかみましょう。
「トレース」という方法について以下で紹介しているので、参考にしてみてください。
まとめ
- 疑似言語の表示形式を覚える
- 出題傾向を知る
- 基本的なプログラムを覚える
- ひたすら過去問を解く