11655번 : ROT13 - Python

Pobi·2023년 1월 24일
0

PS

목록 보기
29/107

문제

https://www.acmicpc.net/problem/11655

풀이

아스키코드를 이용하여 13을 더하면 된다. 다만 z혹은 Z를 넘어가는 값은 a 혹은 A부터 다시 시작하는 걸로 철리해줘야 한다.
예를 들어보자
o는 아스키 코드 값이 111이다. 111 + 13은 124인데 z인 122를 넘는다. 이런 경우를 처리해 줘야 한다.
o를 97(a의 아스키코드 값)+14로 보고13을 더해주면 97+14+13이다. 여기서 97을 빼주고 남음 값을 26으로 나눈 값의 나머지를 97에 더하면 된다. 97+((97+14)+13-97)%26 = 98인 b가 된다.

코드

from sys import stdin

input = stdin.readline

S = input()

for i in S:
    if i.islower():
        print(chr(97+(ord(i)+13-97)%26), end = '') #z의 값을 넘으면 a로 돌아가서 계산할 수 있도록 하는 계산
    elif i.isupper():
        print(chr(65+(ord(i)+13-65)%26), end = '') #Z의 값을 넘으면 A로 돌아가서 계산할 수 있도록 하는 계산
    else:
        print(i, end = '')
profile
꿈 많은 개발자

0개의 댓글