[백준] 11655 - ROT13 (Python)

민영·2021년 9월 2일
0

[Algorithm] 백준

목록 보기
14/31
post-thumbnail

문제

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

제출 코드

import sys

input = sys.stdin.readline().rstrip("\n")
result = ""

for s in input:
    if 'A' <= s <= 'Z':
        if s <= 'M':
            result += chr(ord(s) + 13)
        else:
            result += chr(ord(s)-13)

    elif 'a' <= s <= 'z':
        if s <= 'm':
            result += chr(ord(s) + 13)
        else:
            result += chr(ord(s) - 13)

    else:
        result += s

print(result)
    

결과


정리

문제 설명 & 개념

일단 이 문제의 이름인 'ROT13'은 영어 알파벳을 13글자씩 밀어서 만드는 암호이고 알파벳이 아닌 글자는 원래 글자 그대로 남아 있어야 한다.

알파벳을 순서대로 나열해보자.
A B C D E F G H I J K L M(13) N O P Q R S T U V W X Y Z(26) (아스키코드: 65-90)
a b c d e f g h i j k l m(13) n o p q r s t u v w x y z(26) (아스키코드: 97-122)

문자를 암호화하는 과정
(1) 해당 문자를 아스키코드 값으로 변환한다.
(2) 13칸을 알맞게 움직인다.
(3) 아스키코드 값을 다시 문자로 변환한다.

(1) ord(): 특정한 한 문자를 아스키코드 값으로 변환해주는 함수

(2) 알파벳은 26개인데 "ROT13"은 13글자씩 밀어서 만드는 암호이니까 13번째 알파벳인 'M/m'을 기준으로 암호화를 해야 되는 문자가 'M/m'보다 앞일때는 +13을 하고 'M/m'보다 뒤일때는 -13을 해서 13칸을 알맞게 움직인다.

(3) chr(): 아스키코드 값을 문자로 변환해주는 함수

주석있는 코드

import sys

input = sys.stdin.readline().rstrip("\n")
result = ""

# input을 한글자씩 읽는다
for s in input: 

    # 대문자일때
    if 'A' <= s <= 'Z':
        # M보다 앞에 있는 문자인 경우 (A-M일때)
        if s <= 'M':
            # 문자를 아스키코드로 변환하고, 13칸을 움직인 다음, 아스키코드 값을 다시 문자로 변환
            result += chr(ord(s) + 13) 
            
        else: # (N-Z일때)
            result += chr(ord(s)-13)

    # 소문자일때 
    elif 'a' <= s <= 'z':
        # m보다 앞에 있는 문자인 경우 (a-m일때)
        if s <= 'm':
            # 문자를 아스키코드로 변환하고, 13칸을 움직인 다음, 아스키코드 값을 다시 문자로 변환
            result += chr(ord(s) + 13)
            
        else: # (n-z일때)
            result += chr(ord(s) - 13)

    # 다른 문자일때 (숫자나 기호)
    else:
        result += s

print(result)

느낀점

확실히 파이썬이 여러 함수가 있어서 편한거 같긴 하다! 다만 아직은 내가 여러 함수를 잘 모르지만ㅎㅎ

profile
그날의 기록

0개의 댓글