관리 메뉴

솜씨좋은장씨

[BaekJoon] 5598번 : 카이사르 암호 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 5598번 : 카이사르 암호 (Python)

솜씨좋은장씨 2021. 8. 20. 00:08
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 카이사르 암호 입니다.

 

5598번: 카이사르 암호

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

www.acmicpc.net

Solution

def caesar_cipher(string):
    answer = []
    
    for char in string:
        if ord(char) > ord('C'):
            temp = chr(ord(char) - 3)
        elif ord(char) < ord('D'):
            temp = chr(ord('Z') - ord('C') + ord(char))
            
        answer.append(temp)
    return "".join(answer)

if __name__ == "__main__":
    string = input()
    print(caesar_cipher(string))

Solution 풀이

변환전    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

이 문제의 카이사르 암호는 입력한 단어를 3문자씩 옮겨서 만드는 암호입니다.

문제는 카이사르 암호로 암호화 된 단어를 주면 

해독하여 원래 단어를 출력하면 되는 문제입니다.

 

문제를 푸는데 주요하게 사용되는 것은

문자를 번호로 바꾸어주는 chr

숫자를 문자로 바꾸어주는 ord 입니다.

 

해독을 할때 에는 단어를 이루는 각 문자를 숫자로 바꾸고

여기서 -3을 한 뒤 다시 문자로 바꾸어 준 뒤

바꾼 값을 이어붙여보면 됩니다.

 

그런데 여기서 주의할 점은

D ~ Z 까지는 -3을 하여도 A ~ W 로 잘 변경이 되지만 

chr(ord(char) - 3)

A ~ C 는 -3을 하게되면 제대로 바뀌지 않습니다.

A ~ C 는 X ~ Z 로 바뀌어야 하므로

Z - C - 입력 값 으로 바꾸어야합니다.

chr(ord('Z') - ord('C') + ord(char))
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments