AtCoder上にある問題のうち、AtCoder Problemsでdiff 800以上と判定されているものを順番に解いていく企画。
基本的な考え方は全てコード中のコメントに入れてあるので、参照のこと。
出典:
CODE FESTIVAL 2016 qual A C – 次のアルファベット
それほど難しくはない。最後の文字を変換するときは、剰余を利用しよう。
# CODE FESTIVAL 2016 qual A C - 次のアルファベット
# https://atcoder.jp/contests/code-festival-2016-quala/tasks/codefestival_2016_qualA_c
# tag: 文字列 変換 辞書順 高橋君
# 各文字を変換する際には、
# 1) a に変換可能なら、変換する
# 2) a に変換できないなら、変換しないほうがいい
# ということを踏まえて組んでいく
def main():
s = input()
K = int(input())
# とりあえず 0 ~ 25 と A ~ Z を相互変換しやすくしておく
# ord と chr を使ってもいいけど、好みで……
alphabets = 'abcdefghijklmnopqrstuvwxyz'
num_to_ab = {k:v for k, v in zip(range(26), alphabets)}
ab_to_num = {k:v for v, k in num_to_ab.items()}
rest = K
# 数字に変換しておく
ch_list = [ab_to_num[c] for c in s]
# 文字を順番に見ていき、'a' に変換可能なら変換する
for i, n in enumerate(ch_list):
# 文字列の最後なら、余っている操作回数を全て使用する
if i == len(ch_list) - 1:
ch_list[i] = (ch_list[i] + rest) % 26
break
# 元々 'a' なら変換しない
if n == 0:
continue
# 'a' に変換可能な操作回数が残っていれば、変換する
if n + rest > 25:
rest -= 26 - n
ch_list[i] = 0
print(''.join(num_to_ab[n] for n in ch_list))
main()
関連