26
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

基本情報|科目B「アルゴリズム問題」、パズルが好きな人はたぶん好き

26
Posted at

フィジカルロボットとは? (2).jpg

はじめに

基本情報の必須出題範囲「疑似言語(アルゴリズム問題)」という響きを聞いただけで身構えていたぷらむんですが、実は科目Bで覚えるべきルールは拍子抜けするくらいシンプルでした。


こんにちわ、会社で自称マスコットキャラをやってるのに、社内で一番空気が読めない、ぷらむんです🐯

基本情報技術者試験を目指すと決めたものの、科目Bの説明を見るたびに出てくる「疑似言語」という言葉に、ずっと身構えていました。新人のぷらむんに読み解けるのか不安だったので、プラ二郎先輩とプラ美先輩に相談してみることにしました。


ーこんな人に読んでほしいー

🟠 基本情報技術者試験の科目Bで、何を勉強すればいいのか分からない
🟠 「疑似言語」という言葉だけで、プログラミング未経験だと無理そうと感じている
🟠 科目Bの試験時間・問題数など、試験の全体像をまだ把握していない
🟠 未経験からIT業界を目指していて、これから基本情報の勉強を始めようとしている


【この記事が前提です】
ITパスポートと基本情報の違いは?結局どっちから受ければいいの?
【全6問】ITパスポートと基本情報、実際どのくらい難しいの?比べてみた


🐯プラ二郎先輩に「科目Bってどんな試験なんですか?」と聞いてみた

ぷらむん_アルゴリズム問題記事_挿絵_2_1200x300.jpg

🧑‍💻:プラ二郎先輩
「まずは相手を知ることが大事だよ。科目Bは、20問を100分で全部解く試験なんだ。しかも8割はアルゴリズムとプログラミング、残り2割が情報セキュリティから出題される」


20問…?全部解かなきゃいけないんですか?てっきり選択問題だと思ってました。

▪️ 科目Bの全体像
🟠 問題数:20問(全問必須解答、選択はできない)
🟠 試験時間:100分(1問あたり平均5分ペース)
🟠 出題比率:アルゴリズムとプログラミング8割/情報セキュリティ2割
🟠 採点方式:IRT(項目応答理論)方式
🟠 合格ライン:1,000点満点中600点以上


🧑‍💻:プラ二郎先輩
「以前は150分で大問11問から5問選ぶ形式で、プログラミング言語もJavaやPythonから選べたんだよ。でも令和5年に大幅に内容が改定されて、今は疑似言語という共通ルールに統一されたんだ。統一された分、逆に対策は立てやすくなったとも言えるね」


なるほど…!選べないと聞くと身構えましたが、「言語をひとつに統一してくれている」と考えると、覚えることはむしろ絞られている気がしてきました。

🐯「疑似言語」は新しいプログラミング言語じゃなかった

ぷらむん_アルゴリズム問題記事_挿絵_1_1200x300.JPG

🧑‍💻:プラ美先輩
「疑似言語って名前を聞くと新しい言語みたいだけど、実は基本情報の試験だけで使われる、日本語ベースの共通ルールなんだよ。JavaやPythonみたいに、実際に動かして覚える必要はないんだ」


え…そうなんですか?てっきりまた新しい言語をイチから覚えないといけないと思って、ぷらむん、頭を抱えていました。

▪️ 覚えるべき最低限のルールはこれだけ
🟠 変数の宣言:型名 : 変数名(例:整数型: x)
🟠 代入:←(例:x ← 10)
🟠 配列:型の配列 : 変数名 ← { }(例:整数型の配列: a ← {1, 2, 3})
🟠 コメント://(例:// ここはコメント)
🟠 条件分岐:if 〜 endif
🟠 繰り返し(while):while 〜 endwhile
🟠 繰り返し(for):for 〜 endfor


🧑‍💻:プラ美先輩
「並べてみると、意外と種類は少ないでしょ?プログラミング未経験でも、この読み方さえ知っていれば、あとは慣れの問題なんだよ」


たしかに…!並べてみると、覚える要素自体は数えるほどしかありませんでした。**「新しい言語を覚える」んじゃなくて「読み方のクセを知る」だけでよかったんです。**

🐯実際に科目Bのミニ問題を解いてみた

ぷらむん_アルゴリズム問題記事_挿絵_3_1200x300.jpg

覚えるルールが分かったところで、実際にプラ二郎先輩と1問解いてみることにしました。配列の中から最大値を探す、科目Bの中でも易しめの問題です(出題パターンを参考にしたオリジナル問題です)。

関数findMaxは、1つ以上の整数が格納された整数型の配列dataを引数で受け取り、配列の中に含まれる最大値を返す。なお、配列の要素番号は1から始まる。

○整数型: findMax(整数型の配列: data)
 整数型: maxVal ← data[1]
 整数型: i
 for (iを2からdataの要素数まで1ずつ増やす)
  if ( ⭐️ )
   maxVal ← data[i]
  endif
 endfor
 return maxVal

⭐️に入るのはどれか?

① data[i] > maxVal
② data[i] < maxVal
③ i > maxVal
④ i < maxVal

答えを見る

正解: ①data[i] > maxVal

maxValには、まずdata1を仮の最大値として入れておきます。そのあとdata[2]からdataの要素数まで、1つずつ「今のmaxValより大きいかどうか」を比較していき、大きければmaxValを上書きする、という処理です。「data[i] > maxVal」が成り立つときだけ更新すればよいので、①が正解です。②だと最小値を探す処理になってしまいますし、③④はiという添字の値そのものと、maxValという中身の値を比較してしまっており、比較する対象が誤っています。


🧑‍💻:プラ二郎先輩
「こういう問題は、頭の中だけで考えようとせず、data・i・maxValの値がどう変わっていくか、紙に表を書いて1行ずつ追ってみるといいよ」


言われた通り、実際に手を動かして確かめてみることにしました。data ← {3, 7, 2, 9, 5}は、この関数が配列の中に含まれる最大値を返すという目的を果たせているか証明するために、ぷらむんが自分で用意したお試しの数字です。中身の数字自体はなんでもよく、どんな数字を入れてもこの目的さえ成り立てば良いので、好きな数字を入れてます。

i・maxValの値を1行ずつ紙に書き出してみると、iが4になったところでmaxValが9に更新されて、そのあとは変わらない…頭の中だけで完結させようとするより、圧倒的に見通しがよくなりました。


🐯解いてみて、ぷらむんが感じたこと

「疑似言語」も「科目B」も、名前だけで身構えて食わず嫌いしていたのは、ぷらむん自身だったのかもしれません。ちゃんと相手を知ってみると、覚えるルールは数えるほどで、あとは紙に書き出しながら値を1行ずつ追うだけ。「難しそう」の正体は、実力不足ではなく情報不足だったんだと気づきました。


もちろん今回解いたのは易しめの1問で、本番はもっと複雑な処理も出てくるはずです。それでも、最初の一歩でここまで見通しがよくなったので、この調子で科目Bの問題にも慣れていこうと思います。


ー今回学んだことをまとめるとー
🟠 科目Bは20問100分・全問必須・IRT方式で、アルゴリズムとプログラミングが8割、情報セキュリティが2割出題される
🟠 疑似言語は新しいプログラミング言語ではなく、基本情報だけで使われる共通の読み方のルール
🟠 覚えるべきルールは、宣言・代入(←)・配列({ })・コメント(//)・if/while/forくらいとシンプル
🟠 プログラムを読み解くときは、頭の中だけで完結させず、値の変化を紙に書き出しながら1行ずつ追うと見通しがよくなる

🦁おわりに

PRUMのエンジニアの多くは未経験からの採用です。ぷらむんのような新人がのびのび成長できる環境が気になった方は、ぜひコーポレートサイトも覗いてみてください。
PRUM採用ページ


エンジニアの方に役立つ記事をまとめたサイトも運営しています。よければこちらもどうぞ。
エンジニアに役立つ記事サイト


また今度、ぷらむんの奮闘記をシェアします。ここまで読んでくれてありがとうございました🐯

26
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?