백준 문제풀이/문자열

[백준] 11655 ROT13 - python

peach_h 2022. 11. 19. 16:09

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

 

11655번: ROT13

첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다.

www.acmicpc.net

 

처음엔 무식하게 알파벳 들어있는 리스트 만들고 거기서 인덱스+13을 하려고했다.

but . . 아스키 코드를 사용하면 비교적 쉽게 구할 수 있음.

ord(문자)  = 아스키 코드 넘버를 출력

출력된 아스키 코드 넘버 +13하면 알아서 13번째 뒤에 알파벳을 꺼내줌.

하지만 총 26개의 알파벳중 13번보다 앞에 번호일 경우에만 13을 더해주고,

13번보다 뒷 번호라면 -13을 해줘야 원하는 값이 나온다.

 

x = input()
total = ''

for i in x:
  if 'a' <= i <= 'z':
    if i <='m':
      total += chr(ord(i)+13)
    else : 
      total +=chr(ord(i)-13)
  elif 'A' <= i <= 'Z':
    if i <='M':
      total += chr(ord(i)+13)
    else : 
      total +=chr(ord(i)-13)
  else:
     total += i

print(total)