[백준/파이썬] 5598. 카이사르 암호

jwKim·2023년 1월 8일
0

💻코테코테

목록 보기
20/42

< 과제 >

[ 문제 ]
가이우스 율리우스 카이사르(Gaius Julius Caesar)는 고대 로마 군인이자 정치가였다. 카이사르는 비밀스럽게 편지를 쓸 때, 'A'를 'D로', 'B'를 'E'로, 'C'를 'F'로... 이런 식으로 알파벳 문자를 3개씩 건너뛰어 적었다고 한다.

26개의 대문자 알파벳으로 이루어진 단어를 카이사르 암호 형식으로 3문자를 옮겨 겹치지 않게 나열하여 얻은 카이사르 단어가 있다. 이 카이사르 단어를 원래 단어로 돌려놓는 프로그램을 작성하시오.

각 문자별로 변환 전과 변환 후를 나타낸 건 아래와 같다.

변환전    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
변환후    D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

예를 들어서, 이 방법대로 단어 'JOI'를 카이사르 단어 형식으로 변환한다면 'MRL'을 얻을 수 있고, 앞의 예와 같은 방법으로 얻은 카이사르 단어 'FURDWLD'를 원래 단어로 고치면 'CROATIA'가 된다.

[ 입력 ]
입력은 한 줄로 이루어져 있으며, 그 한 줄에는 대문자 알파벳으로 구성된 단어가 1개 있다. 단어는 최대 1000자 이하이다.

[ 출력 ]
입력받은 카이사르 단어를 원래 단어로 고친 걸 출력하시면 된다.

[ 예제 입력 1 ]
MRL

[ 예제 출력 1 ]
JOI

[ 예제 입력 2 ]
FURDWLD

[예제 출력 2 ]
CROATIA

< 내 코드 >

# A -> 65 ~ Z -> 90
word = input()

for i in range(len(word)):
    u_num = ord(word[i]) # 유니코드로 변환
    
    if u_num < 68:
        char = chr(u_num + 23)
    else:
        char = chr(u_num - 3)
    print(char, end='')

< 피드백 >

  • python 기본 내장 함수 중에는 ord()chr()가 있다.

    • ord() 함수는 인자로 받는 문자열을 유니코드로 변경해준다.
      • ord('A') = 65 / ord('Z') = 90
    • chr() 함수는 인자로 받은 정수를 문자열로 변경해준다.
      • chr(65) = A / chr(90) = Z
    • 문자열 자체로는 연산을 통해 데이터를 바꿀 수 없으므로 숫자형으로 변경한 후 원래 문자로 변환한 후 다시 문자열로 변경한다.
  • 카이사르 암호 중 D ~ Z는 유니코드로 -3만 해주면 된다. 하지만 카이사르 암호 X, Y, Z는 23을 더해줘야한다. 아래 표를 참고하면 도움이 된다.

    원래 알파벳유니코드카이사르 알파벳유니코드
    A65D69
    B66E70
    C67F71
    D68G72
    E69H73
    ............
    V86Y89
    W87Z90
    X88A65
    Y89B66
    Z90C67
  • 머리로만 생각하는 것은 아직 한계가 있기 때문에 노트에 규칙을 써보면서 구체화 해보자

< 출처 >

0개의 댓글