ABC146 B - ROT N
備忘録
問題
回答
import sys import os def main(): if os.getenv("LOCAL"): sys.stdin = open("input.txt", "r") N = int(sys.stdin.buffer.readline()) S = sys.stdin.buffer.readline().decode().rstrip() ret = [] for s in S: n = ord(s) + N if n > 90: ret.append(chr(n - 26)) else: ret.append(chr(n)) print("".join(ret), end="") if __name__ == '__main__': main()
考え方
英大文字をord
で文字コードに変えて、N
を加算。
文字コードが90
を超える(Z
以降になる)場合は26
を減算、
超えていない場合はそのままchr
で英大文字に変換する。
注意しなければならないのは、sys.stdin
で標準入力を受け取る際に、
N = int(sys.stdin.readline().rstrip())
S = sys.stdin.readline()
のようなやり方ではWA
になる。
あと、もうちょっと綺麗な回答
Submission #10947423 - AtCoder Beginner Contest 146
(ord(s) + N - 65 ) % 26
でZ
以降の英大文字になっている場合は、余りを利用することで、
A ~ Z
を一周した後の文字コードの値にしている。