ABC407 C – Security 2

本日はABC407 C – Security 2について見てみようと思います。言語はPythonになります。

C - Security 2
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

問題

画面に表示される文字列tがあります。tは最初空文字でボタンを押すと以下の変化が起こります。

  • ボタンA:末尾に0追加。
  • ボタンB:tの数字がそれぞれ1増加する。9の場合は0になる。

ボタンBの動作は例えば1984の場合、2095になります。

与えられた文字列Sと文字列tが同じになるためには最小で何回操作が必要になるかを答える問題になります。

解き方

文字列Sが1984の場合を考えてみます。

各数字は同じように1ずつ増加するので、差分を考えれば良いです。

1と9の差分は2なので、一文字目の0が2になるときに次の0が追加します。

これでt=20になります。続いて9と8の差分は1です。二文字目の0が1になるときに0を追加します。

t=310になります。

続いて8と4の差分は4です。3文字目の0が4になったところで0を追加します。

t=7540になります。

後はBボタンを4回押す操作でt=1984になりますね。

以上の操作を合計すると2+1+4+4で11回になります。

最後にAボタンを押す回数(4回)を足せば答えになります。

以下のコードでACできました。

def i_map():
    return map(int, input().split())


def i_list():
    return list(map(int, input().split()))


s = input()
ans = 0

for i in range(len(str(s)) - 1):
    tmp1, tmp2 = int(str(s)[i]), int(str(s)[i + 1])

    if (tmp1 - tmp2) > 0:
        ans += tmp1 - tmp2
    elif (tmp1 - tmp2) < 0:
        ans += 10 + (tmp1 - tmp2)

ans += len(str(s)) + int(str(s)[-1])
print(ans)

コメント

タイトルとURLをコピーしました