今回の内容
昨日(2022/10/09)に実施された、令和4年度 応用情報技術者試験(秋期) 午後 問3(プログラミング問題)を解いてみました。
少し前までは、応用情報午後のプログラミング問題を解くのが私の中では恒例行事だったんですが、最近なかなかできてなかった&今回3連休だったので、久々にチャレンジしてみました。
なお問題は、下記URLからダウンロードできます。
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2022r04.html#04aki
注意
- あくまでも、私の回答です。
- この答えが100%合っているという保証はどこにもないです。(本当に自分の回答レベル)
(自分の)回答
設問1
- (1):3 ((5, 1), (3, 4), (4, 4)は通らない)
- (2):2 ((1, 1)と(2, 1))
設問2
- イ:paths[sol_num][k]
- ウ:stack_top - 1
- エ:maze[x][y]
設問3
- オ:sol_num
設問4
- (1):(5, 3)
- (2):
- キ:22
- ク:3
設問4について
1つ目の解が出るまでに行われる移動の8回目以降は以下の通り。(7回目までは問題文の通り)
- (1, 3)
- (2, 3)
- (3, 3)
- (3, 4)
- (4, 4)
- (5, 4)
- (5, 5) ※1つ目の解
- この後、(5, 4)での「2. x座標を1増やす」の(6, 4)は外壁なのでvisit()は実施されない
- 「3. y座標を1減らす」でvisit(5, 3)が実行される
座標(5, 3)からは、下記の順に移動が実施される
- (5, 2)
- (5, 1)
- (5, 2)
- (4, 2) 1回
- (3, 2)
- (3, 1)
- (2, 1)
- (3, 1)
- (3, 2)
- (4, 2) 2回
- (5, 2)
- (5, 3)
- (5, 4)
- (4, 4)
- (3, 4)
- (3, 3)
- (3, 2)
- (4, 2) 3回
- (5, 2)
- (5, 3)
- (5, 4)
- (5, 5) ※2つ目の解
感想
再帰を使った迷路探索ですね。
「具体的に、どういうことを意図している(=やりたい)コードなのか」が理解&イメージできれば割と簡単だけど、そこまでたどり着けるかどうかがポイントかな、と思いました。(特に進もうとするマスがVISITEDだった場合に、「どうやってpathsにこの経路を追加するのか」とか効率化を考えたりするとハマっちゃうかもしれません)
ましてや結構試験時間もカツカツで焦りもある中、ですからねえ。
もし自分が実際に試験を受けていたら、時間内に解けなかったんじゃないか?と思います。
てか、自分が実際に受験したとき(2016年春期。熊本地震の直後、かつたまたま午後問2(経営戦略)の問題が「大地震発生時のBCP計画について」となっていて話題になった回)も、プログラミング問題始めた時、残り15分強しかなかったような...(確かライフゲームの問題だったかな?あれは解いてて良問だったなあ、と感じた記憶があります。)
それでは、今回はおまけということで、こんな感じで