🏠 Home / 競プロ / PAST

第二回 アルゴリズム実技検定 A - エレベーター 解説

問題

問題文は本家サイトにあります:第二回 アルゴリズム実技検定 A - エレベーター

問題概要

ある建物には18のフロアがある。フロアは、下から B9, B8, …, B1, 1F, 2F, …, 9F という名前がついている。

隣接する2つのフロア間を移動するのに1秒かかるとき、フロア $S$ からフロア $T$ まで移動するのにかかる最短時間を答えなさい。

制約

$S, T$ は相異なるフロアの名前。

解説

数直線とは異なり、日本でのフロアの表し方には "0" に当たるものがありません。その点に注意して計算しましょう。

1F を基準にした位置を考えることにします。2F なら "+1" で、9F なら "+8" です。また、B1 なら "-1" で、B5 なら "-5" です。こうすれば、大きい方から小さい方を引くと、移動するフロア数が求められます。差の絶対値を計算しても同じ結果になります。

このように、フロア名に対して「1F を基準にした位置」を対応させるには、

  • 2文字目が F なら、1文字目から1を引く
  • 1文字目が B なら、2文字目にマイナスをつける

とすればいいですね。C++ では次のように書くことができます。

#include <iostream>
using namespace std;

int pos(string X) {
  if (X[1] == 'F') return (X[0] - '0') - 1;
  else return -1 * (X[1] - '0');
}

int main() {
  string S, T; cin >> S >> T;
  int s = pos(S), t = pos(T);

  cout << abs(s - t);
  return 0;
}

関連するページ

YouTubeもやってます

チャンネル登録はコチラから (以下は、動画のサンプルです)
慶應義塾大学薬学部2024年度数学第1問5 同志社大学文系2024年度数学第1問3 昭和大学医学部I期2024年度数学第2問 兵庫医科大学2024年度数学第3問 共通テスト2B2024年度第3問2のヒントについて 久留米大学医学部推薦2024年度数学第4問