【ABC146 B】「ROT N」を解く【Python3】

abc146b

コンテスト一覧へ

 

英数字からなる文字列Sと整数Nが与えられ、Sの各文字をN個後の文字に置き換えた文字列を返す問題です。

文字列Sで出てくる文字は、英大文字の「A〜Z」のみです。

提出
n = int(input())
s = input()

for i in s:
    m = (ord(i) - ord('A') + n) % 26
    ans += chr(m + ord('A'))

print(ans)

ASCIIコード(アスキーコード)を用いて解くことができます。

問題では、入力した文字列をASCIIコードに変換し、Nを足して、文字に変換しなおします。

ASCIIコード

コンピュータは二進数で処理を行うため、文字データも数字に置き換えて処理します。

特定の文字を表す数字を文字コードと呼びます。

ASCIIコードは、アルファベットや記号などを中心とした文字コードです。

ord()関数 chr()関数

Pythonでは、ord()関数とchr()関数を用いて、文字とASCIIコードの変換ができます。

print(ord('a'))
# > 97
print(chr(97))
# > 'a'

AのASCIIコードは「65」、ZのASCIIコードは「90」。

Aを0として考えたいので、最初に「AのASCIIコード」を引いてからnを足します。

問題では、Zの1個後の文字がAとなっているため、26で割った余りを求めます。

これに「AのASCIIコード」を再び足して文字に変換すると、もともとの文字のN個後の文字が出てきます。

あとは文字列として出力するだけです。

 

ちなみに、ASCIIコードを知らない場合でも、アルファベットのリストを作って、インデックスから求めることもできます。

【ABC146】解説記事

コンテスト一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。