アルゴリズムとプログラミング|平成27年度 春期 ITパスポート試験(特別措置試験) 問87
〔中問A・テクノロジ〕P社では,一度の解錠で同時に複数の社員が入退室することがあり,入室と退室の記録の数が合わないという問題が発生していることが分かった。そこで,毎日,入退室記録表を使って,前日の入退室の回数が一致しない社員がいないかどうかを確認することにした。次に示す入退室確認では,前日の日付で,同一区画での入室と退室の回数が一致していないICカード番号を調べる手順を示している。a,bに入れる字句の適切な組合せはどれか。
〔中問A の共通の記述(抜粋)〕入退室記録表の項目は 入退室年月日 / 入退室時刻 / ICカード番号 / 区画番号 / 入退室区分 である。入退室区分には,入室の場合は "1",退室の場合は "−1" が記録される。なお,P社は,社員に対して午前0時までに退社することを義務づけている。
〔前日の入退室確認〕
(1)入退室年月日が前日の日付であるレコードを全て取り出し,ICカード番号の昇順で,かつ,区画番号の同じレコードが並ぶように整列する。
(2)(1)で整列したレコードに対して,ICカード番号と区画番号が同じレコードごとに,それらの [ a ] し,その結果の値と ICカード番号及び区画番号とを併せて表として記録する。
(3)(2)で記録した [ a ] した値が [ b ] ICカード番号と区画番号を出力する。
〔a・b の組合せ〕
| a | b | |
|---|---|---|
| ア | 区画番号が1の場合は1を加算し,2の場合は2を加算 | 奇数である |
| イ | 入退室区分の値を合計 | 0でない |
| ウ | 入退室時刻の入室と退室の時刻差を合計 | 24時間を超える |
| エ | レコードの個数を計数 | 偶数である |
- a:区画番号が1の場合は1を加算し,2の場合は2を加算 / b:奇数である
- ✓ これが正解a:入退室区分の値を合計 / b:0でない
- a:入退室時刻の入室と退室の時刻差を合計 / b:24時間を超える
- a:レコードの個数を計数 / b:偶数である
解説
入室と退室の値の置き方に、答えそのものが仕込まれています。
入室に一、退室にマイナス一が記録されています。同じ人が同じ区画で入った回数と出た回数がそろっていれば、足し合わせると零になります。そろっていなければ零から離れます。だから、整列したうえで組ごとに値を合計し、零でないものを出せば足ります。二つの値は、足すだけで一致が分かるようにわざと選ばれています。件数を数える案は、そろっていれば偶数になるという向きだけが正しく、入室だけが二回でも偶数になるので逆は言えません。値の置き方そのものが、後の処理を決めていることがあります。入室と退室に足して零になる二つを選んでおけば、数え直さずに済みます。設計のときにこう決めておくと、確かめる手順が短くて済みます。後から数え方を工夫するより、記録する値を選び直すほうが効きます。仕組みを作る一手が、後の手間を決めます。
ほかの選択肢はなぜ違うのか
- 区画の番号そのものを足す案です。区画は十あり、しかも足している値が入退室と関わっていません。どの区画で何回開いたかを数えたい、と聞かれたら、区画の番号を使います。入った回数と出た回数をそろえる場面では、使われません。
- 時刻の差を合計して一日を超えたものを出す案です。日をまたがない決まりがあるので、超えることが起こりません。平均の滞在時間を出したい、と聞かれたら、時刻の差を使います。日をまたぐ運用であれば、さらに別の見方が要ります。
- 件数を数えて偶数のものを出す案です。偶数から一致は言えず、しかも出しているのが正常なほうになっています。何回そこを通ったかを知りたい、と聞かれたら、件数を数えます。そろっているかどうかまでは、件数だけでは言えません。
この問題に関係する言葉
- 整列
- アルゴリズム問題を解くための、決まった手順や考え方そのものです。書き表したプログラムと違い、それ自体は著作権で守られません。
出典:平成27年度 春期 ITパスポート試験(特別措置試験) 問87(改変:原典の図表をテキストに書き起こした)
同じ単元をまとめて解くならアルゴリズムとプログラミングへ。
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)