s = input()
s_list = list(s)

for i in range(len(s_list)):
    if s_list[i].isalpha():
        if s_list[i].islower():
            s_list[i] = chr((ord(s_list[i]) - ord('a') + 13) % 26 + ord('a'))
        elif s_list[i].isupper():
            s_list[i] = chr((ord(s_list[i]) - ord('A') + 13) % 26 + ord('A'))

s = ''.join(s_list)
print(s)

 

 

  • ord(s_list[i]) - ord('a'): 문자의 아스키 코드 값에서 'a'의 아스키 코드 값을 빼면, 해당 문자가 알파벳에서 몇 번째인지 알 수 있음. ex) 'b'의 경우 ord('b') - ord('a') = 1
  • + 13: ROT13 변환
  • % 26: 알파벳이 26글자이므로 26으로 나눈 나머지를 구합니다. (알파벳 범위를 벗어나지 않도록)
  • + ord('a'): 다시 'a'의 아스키 코드 값을 더해 원래의 아스키 코드 범위로 되돌리기
  • chr(): 최종 값을 다시 문자로 변환

 

** 만약 ord(s_list[i]) + 13을 바로 적용할 경우, 'z' 이후로 알파벳 범위가 넘어감 

  그래서 ord(s_list[i]) - ord('a')로 0 ~ 25까지 값 정해두고 + 13

  >> %26하면 0 ~ 25사이에서 벗어나지 않음

  >> + ord('a') 아까 뺐던거 다시 추가해주기 

 

'HELLO WORLD > BAEKJOON' 카테고리의 다른 글

백준 | 2920 음계  (0) 2025.01.16
백준 | 11718 그대로 출력하기  (0) 2025.01.16
백준 | 10820 문자열 분석  (0) 2025.01.16
백준 | 11656 접미사 배열  (0) 2025.01.16
백준 | 1755 숫자놀이  (0) 2025.01.09

+ Recent posts