> ## Content Index
> Fetch the complete content index at: https://www.geekjp.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# 令和元年度秋期 基本情報技術者試験 午前 問7～問10｜過去問解説
- URL: https://www.geekjp.com/2019-10-31-014254/
- Published: 2019-10-30T16:42:54.000Z
- Updated: 2026-07-26T14:10:40.000Z
- Description: 令和元年度秋期・基本情報技術者試験の午前問7～問10を解説します。BNFによる変数名の定義、スタック、二次元配列の変換、ハッシュ関数による格納位置を扱います。
- Author: 工学じじい
- Tags: コンピュータサイエンス, ゲームプログラミング, 技術, 情報処理技術者試験, アルゴリズム, #Import 2026-07-19 20:21, #Import 2026-07-19 20:24

> **この記事について**  
> 2019年（令和元年度）秋期に実施された基本情報技術者試験 午前の問7～問10を扱う過去問解説です。現在の試験制度や出題形式とは一部異なりますが、コンピュータサイエンスの基礎学習には引き続き活用できます。

> **出典・引用について**  
> 問題文、選択肢および試験問題に含まれる図表は、独立行政法人情報処理推進機構（IPA）が公開している令和元年度秋期試験から引用しています。掲載にあたり、改行、表組み、全角・半角、画像配置などを調整している場合があります。問題の趣旨は変更していません。解説、補足、計算過程および当サイト作成の図は、工学じじいの縁側日記によるものです。  
> [IPA公式・問題冊子（PDF）](https://www.ipa.go.jp/shiken/mondai-kaiotu/gmcbt8000000dict-att/2019r01a%5Ffe%5Fam%5Fqs.pdf?ref=geekjp.com) ／ [IPA公式・解答例（PDF）](https://www.ipa.go.jp/shiken/mondai-kaiotu/gmcbt8000000dict-att/2019r01a%5Ffe%5Fam%5Fans.pdf?ref=geekjp.com) ／ [2019年度の過去問題一覧](https://www.ipa.go.jp/shiken/mondai-kaiotu/2019h31.html?ref=geekjp.com)

## R01基本情報技術者試験 秋期試験に挑戦

### 令和元年度 基本情報技術者試験 午前問題 問7～問10

#### 令和元年度 基本情報技術者試験 午前問題 問7

> 出典：[令和元年度 秋期 基本情報技術者試験 午前 問7](https://www.ipa.go.jp/shiken/mondai-kaiotu/gmcbt8000000dict-att/2019r01a%5Ffe%5Fam%5Fqs.pdf?ref=geekjp.com)

次のBNFで定義される変数名に合致するものはどれか。

```text
<数字>   ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<英字>   ::= A | B | C | D | E | F
<英数字> ::= <英字> | <数字> | _
<変数名> ::= <英字> | <変数名><英数字>

```

| 選択肢 | 文字列   |
| --- | ----- |
| ア   | \_B39 |
| イ   | 246   |
| ウ   | 3E5   |
| エ   | F5\_1 |

#### 解説

BNF（Backus-Naur Form）の問題です。

BNFの基本的な読み方は、次のとおりです。

```text
<左辺> ::= <右辺>

```

これは、左辺を右辺の規則によって生成できるという意味です。

今回調べる規則は、次の部分です。

```text
<変数名> ::= <英字> | <変数名><英数字>

```

変数名は、最初の1文字が必ず英字になります。その後ろには、英字、数字、またはアンダースコアを追加できます。

各選択肢を分解すると、次のようになります。

```text
ア  _B39 = <英数字><英字><数字><数字>
イ  246  = <数字><数字><数字>
ウ  3E5  = <数字><英字><数字>
エ  F5_1 = <英字><数字><英数字><数字>

```

ア、イ、ウは、先頭が英字ではありません。したがって、変数名の規則には合致しません。

エの `F5_1` は、次のように生成できます。

```text
F
↓
F5
↓
F5_
↓
F5_1

```

BNFの記号で表すと、次の流れです。

```text
<変数名>
→ <英字>
→ <英字><英数字>
→ <英字><英数字><英数字>
→ <英字><英数字><英数字><英数字>
→ F5_1

```

よって、**エの `F5_1` が正解**です。

#### 令和元年度 基本情報技術者試験 午前問題 問8

> 出典：[令和元年度 秋期 基本情報技術者試験 午前 問8](https://www.ipa.go.jp/shiken/mondai-kaiotu/gmcbt8000000dict-att/2019r01a%5Ffe%5Fam%5Fqs.pdf?ref=geekjp.com)

A、C、K、S、Tの順に文字が入力される。スタックを利用して、S、T、A、C、Kという順に文字を出力するために、最小限必要となるスタックは何個か。

ここで、どのスタックにおいても、ポップ操作が実行されたときには必ず文字を出力する。また、スタック間で文字を移動することはできない。

| 選択肢 | スタック数 |
| --- | ----- |
| ア   | 1     |
| イ   | 2     |
| ウ   | 3     |
| エ   | 4     |

#### 解説

スタックは、後入れ先出し（LIFO）のデータ構造です。

`push(x)`でデータを積み、`pop()`で一番上のデータを取り出します。

例えば、次の順番で操作します。

```text
① push(3)
② push(5)
③ push(2)
④ pop()    → 2を取り出す
⑤ push(1)
⑥ pop()    → 1を取り出す
⑦ pop()    → 5を取り出す

```

スタックの状態は、次のように変化します。左側が取り出し口、右側が底です。

```text
操作前          [                 ]
push(3)         [ 3               ]
push(5)         [ 5 | 3           ]
push(2)         [ 2 | 5 | 3       ]
pop() → 2       [ 5 | 3           ]
push(1)         [ 1 | 5 | 3       ]
pop() → 1       [ 5 | 3           ]
pop() → 5       [ 3               ]

```

今回の入力順は、次のとおりです。

```text
入力順：A → C → K → S → T
出力順：S → T → A → C → K

```

スタックが1個の場合、すべて積むと次の状態になります。

```text
[ T | S | K | C | A ]

```

最初に取り出せるのはTなので、Sから出力できません。

スタックが2個の場合、Tを別のスタックへ入れることでS、Tまでは取り出せます。

```text
スタック1：[ S | K | C | A ]
スタック2：[ T             ]

```

しかし、その後にA、C、Kの順で取り出せません。

配置を工夫しても、2個ではCとKの順番を解決できません。

```text
スタック1：[ S | A     ]
スタック2：[ T | K | C ]

```

スタックを3個にすると、次のように配置できます。

```text
スタック1：[ S | A ]
スタック2：[ T | K ]
スタック3：[ C     ]

```

この状態なら、次の順番で取り出せます。

```text
S → T → A → C → K

```

よって、**ウの3個が正解**です。

#### 令和元年度 基本情報技術者試験 午前問題 問9

> 出典：[令和元年度 秋期 基本情報技術者試験 午前 問9](https://www.ipa.go.jp/shiken/mondai-kaiotu/gmcbt8000000dict-att/2019r01a%5Ffe%5Fam%5Fqs.pdf?ref=geekjp.com)

配列Aが図2の状態のとき、図1の流れ図を実行すると、配列Bが図3の状態になった。図1のaに入れる操作はどれか。

ここで、配列A、Bの要素を、それぞれ `A(i,j)`、`B(i,j)` とする。

![流れ図](https://www.geekjp.com/content/files/images/import/hatena/2019/10/20191031005939.png "図1 流れ図")

*図1 流れ図*

![配列Aの状態](https://www.geekjp.com/content/files/images/import/hatena/2019/10/20191031010322.png "図2 配列Aの状態")

*図2 配列Aの状態*

![実行後の配列Bの状態](https://www.geekjp.com/content/files/images/import/hatena/2019/10/20191031010024.png "図3 実行後の配列Bの状態")

*図3 実行後の配列Bの状態*

| 選択肢 | 操作                   |
| --- | -------------------- |
| ア   | B(7-i, 7-j) ← A(i,j) |
| イ   | B(7-j, i) ← A(i,j)   |
| ウ   | B(i, 7-j) ← A(i,j)   |
| エ   | B(j, 7-i) ← A(i,j)   |

#### 解説

配列のインデックスを使って、配列Aの配置を時計回りに90度回転させる問題です。

図2と図3を見比べると、例えば次の位置が対応しています。

```text
A(0,1) → B(1,7)
A(7,1) → B(1,0)
A(3,4) → B(4,4)

```

まず、`A(0,1) → B(1,7)`を各選択肢へ代入します。

```text
ア  B(7-0, 7-1) = B(7,6)
イ  B(7-1, 0)   = B(6,0)
ウ  B(0, 7-1)   = B(0,6)
エ  B(1, 7-0)   = B(1,7)

```

この時点で、エが対応しています。

ほかの座標でも確認します。

```text
A(7,1) → B(1,0)

エ：B(1, 7-7)
   = B(1,0)
   → 一致

```

```text
A(3,4) → B(4,4)

エ：B(4, 7-3)
   = B(4,4)
   → 一致

```

よって、**エが正解**です。

#### 令和元年度 基本情報技術者試験 午前問題 問10

> 出典：[令和元年度 秋期 基本情報技術者試験 午前 問10](https://www.ipa.go.jp/shiken/mondai-kaiotu/gmcbt8000000dict-att/2019r01a%5Ffe%5Fam%5Fqs.pdf?ref=geekjp.com)

10進法で5桁の数 `a1a2a3a4a5` を、ハッシュ表を用いて配列へ格納したい。

ハッシュ関数を次のように定める。

```text
mod(a1 + a2 + a3 + a4 + a5, 13)

```

求めたハッシュ値に対応する位置の配列要素へ格納する場合、54321は配列のどの位置に入るか。

ここで、`mod(x,13)`は、xを13で割った余りとする。

| 選択肢 | 配列の位置 |
| --- | ----- |
| ア   | 1     |
| イ   | 2     |
| ウ   | 7     |
| エ   | 11    |

#### 解説

指定されたハッシュ関数へ、54321の各桁を代入します。

```text
mod(5 + 4 + 3 + 2 + 1, 13)
= mod(15, 13)
= 2

```

ハッシュ値は2なので、**イが正解**です。

### 次回予告

次回も、まったり問11から解いていこうと思います。  
参考になれば幸いです。

---

## シリーズ内の記事

- 前の記事：[問3～問6の解説](https://www.geekjp.com/2019-10-30-042832/)
- 一覧：[令和元年度秋期 基本情報技術者試験 テクノロジ系まとめ](https://www.geekjp.com/2019-11-18-144908/)
- 次の記事：[問11～問15の解説](https://www.geekjp.com/2019-11-01-005609/)

内容の誤りや分かりにくい箇所は、[お問い合わせページ](https://www.geekjp.com/contact/)からお知らせください。