目次
はじめに
この記事では、ABC373のB問題を解説していきます。
ABC(AtCoder Beginner Contest)とは、AtCoderが開催している、競技プログラミングコンテストです。
ABC373 B – 1D Keyboard
問題
26個のキーが数直線上に並んだキーボードがあります。
このキーボードの配列は A〜Z のアルファベットを並べ替えた文字列Sで表されます。
さて、このキーボードを使って A〜Z をこの順で右手人差し指で一度だけ入力します。 ある文字を入力するためには、その文字に対応するキーの座標に指を移動させてキーを押す必要があります。
はじめ、指はAに対応するキーの座標にあります。Aに対応するキーを押してから、Zに対応するキーを押すまでの指の移動距離の合計として考えられる最小値を求める問題です。
制約
なし
思考の筋道
キーボードにおける A〜Z のインデックスを調べ、隣り合うアルファベットのインデックスの差(絶対値)を移動距離に加えていくことで解くことができます。
具体例:入力例2
下のコードでは、index(現在のインデックス)とnext_index(次のインデックス)の2つの変数を管理することで、移動距離を計算しています。
また、string.ascii_uppercase によって、大文字アルファベットからなる文字列 “ABCDEFGHIJKLMNOPQRSTUVWXYZ” を作成し、ループに活用しています。
コード
import string
S = input()
move = 0
index = S.find("A")
for char in string.ascii_uppercase:
next_index = S.find(char)
move += abs(next_index - index)
index = next_index
print(move)
以上、ABC373のB問題の解説でした!
では、またね。
S=”MGJYIZDKSBHPVENFLQURTCWOAX”のとき
ここまでの移動距離は0。
ここまでの移動距離は15。
ここまでの移動距離は21。