[백준] ROT13 11655번 파이썬 Python 자료구조

Jeony·2021년 11월 25일
0

백준

목록 보기
17/25
post-thumbnail

📌생각해보기

  1. 알파벳 나열은 아스키코드를 사용하면 편리하다.

  2. 알파벳에서 13글자씩 밀어서 쓸 때의 규칙을 생각해본다.
    A(65) -> +13 -> N(78)
    ...
    M(77) -> +13 -> Z(90)

    N(78) -> -13 -> A(65)
    ...
    Z(90) -> -13 -> M(77)

    a ~ m 까지는 +13
    n ~ z 까지는 -13
    A ~ M 까지는 +13
    N ~ Z 까지는 -13

  3. 소문자, 대문자, 숫자, 공백을 어떻게 구분할 것있가?
    -> 방법 1. 전용함수(islower(), isupper(), isdigit())를 사용한다.
    -> 방법 2. 'a'<=비교<='z', 'A'<=비교<='Z'

📌내가 작성한 코드

s = input()
answer = ''

for i in s:
    if i.islower():
            if 97 <= ord(i) <= 109:
                answer += chr(ord(i) + 13)
            else:
                answer += chr(ord(i) - 13)
    elif i.isupper():
        if 65 <= ord(i) <= 77:
            answer += chr(ord(i) + 13)
        else:
            answer += chr(ord(i) - 13)
    else:
        answer += i

print(answer)

📌풀이

  1. 답을 쌓아 나갈 문자열 변수 answer 초기화.
    input으로 받은 문자열을 for문으로 반복시키고
    만약 i가 소문자일 때,
    i가 "a" ~ "m" 사이면
    answer에 i + 13한 것을 answer에 더해준다.
    그게 아니라 i가 "n" ~ "z" 사이면
    answer에 i - 13한 것을 answer에 더해준다.

answer = ''

for i in s:
    if i.islower():
            if 97 <= ord(i) <= 109:
                answer += chr(ord(i) + 13)
            else:
                answer += chr(ord(i) - 13)

그 뒤는 대문자로의 반복.

profile
알고리즘으로 문제를 해결하자 (ʘ言ʘ╬)

0개의 댓글