[BOJ] 11655. ROT13

Jimeaning·2023년 4월 5일
0

코딩테스트

목록 보기
57/143

Python3

문제

입출력

입출력 예시

주요 포인트

chr(97+(ord(i)+13-97)%26) 수식 풀이

  1. i를 아스키 코드로 변환 후 13을 더함.
  2. 그 후, 97을 제외하고 26으로 나눴을 때 나머지를 구함.
    (이유 : 13을 더하다보면 아스키 코드에서 z를 넘어가게 됨. 이에, a부터 0으로 통일하기 위해 2번과 같은 같은 수식을 함.)
  3. 97부터 2번에서 나온 값을 더하면 a부터 z를 벗어나지 않음.
  4. 3의 값을 chr함수를 통해 다시 문자로 변환

(예시)
13을 더해 123이 나오면 122가 z이므로 범위를 벗어남.
때문에 2번의 수식을 대입하면 0이 나옴.
여기에 97+0을 해주면 a로 돌아가게 됨.

chr(65+(ord(i)+13-65)%26)인 대문자도 동일

최종 코드

s = input()

for i in s:
    if i.islower():
        print(chr(97+(ord(i)+13-97)%26), end='')
        
    elif i.isupper():
        print(chr(65+(ord(i)-13-65)%26), end='')
    
    else:
        print(i, end='')

피드백

ord(i)+13의 값이 110을 넘어갈 때 기준으로 짰었다. (n의 아스키 코드값)
너무 많은 조건문이 필요했다. 대소문자인지 판단해서 97, 65 수식으로 나누고 공백, 숫자일 때는 그대로 출력하도록 짜는 게 포인트였다.

참고

https://youjin86.tistory.com/45

profile
I mean

0개의 댓글