AtCoder ABC 146 B – ROT N Python解説

スポンサーリンク

ROT N

英大文字のみからなる文字列 S があります。また、整数 N が与えられます。
S の各文字を、アルファベット順で N 個後の文字に置き換えた文字列を出力してください。
ただしアルファベット順で Z の 1 個後の文字は A とみなします。

AtCoder Beginner Contest 「ROT N」

与えられる文字列Sは英大文字限定なので、アルファベットのZの次はAに戻ることに注意しましょう。アルファベットのリストを作り、文字列SのN個後の文字を調べたいと思います。

n = int(input())
s = input()

alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
            "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
letter = ""

for i in s:
    num = alphabet.index(i)
    letter += alphabet[(num + n) % 26]
    
print(letter)

for文の中では、まず、文字列のインデックスを調べています。その後、nを足して26で割ります。26で割る理由はアルファベットの数が26個なので、26で割った余りをもとめるとZの次がAに戻るようになるからです。あとは変数letterに文字を足していって出力すれば完了です。

アルファベットのリストを作成する以外にもord関数を使った方法もあります。

n = int(input())
s = input()

letter = ""

for i in s:
    m = (ord(i) - 65 + n) % 26
    letter += chr(m + 65)
    
print(letter)

ord関数とはPythonで文字をUnicode値に変換してくれる組み込み関数です。
Unicodeで英大文字のAは65なので、m = (ord(i) – 65 + n) % 26の部分は、65を引くことにより、26で割った余りをもとめるとZの次がAに戻るようにしています。

最後にchr関数でUnicode値を文字列に戻して完了です。文字列に戻す際、先ほど引いた65を加えるのを忘れずに。

AtCoderB問題

Posted by cheese