국문과 유목민

19. 시저암호 본문

알고리즘_코딩테스트/프로그래머스_Level1

19. 시저암호

논곰 2020. 9. 10. 22:07

0. 문제

링크) https://programmers.co.kr/learn/courses/30/lessons/12926

 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가

programmers.co.kr


1. 알고리즘 계획

  1. 해당 문자들의 binarycode에 대해 확인한다.
  2. 코드의 부분을 대문자 부분과 소문자 부분으로 나누어 계산한다.
  3. 일정한 값을 초과하게 되면, 다시 처음으로 돌아갈 수 있게 코드를 짠다.


2. 나의 코드

def solution(s, n):
    answer = ""
    for idx in range(len(s)):
        res = ord(s[idx])
        if res == 32:
            answer += s[idx]
            continue
        elif res >= 65 and res <= 90:
            res += n
            if res > 90:
                answer += chr(res - 26)
            else:
                answer += chr(res)
        else:
            res += n
            if res > 122:
                answer += chr(res - 26)
            else:
                answer += chr(res)
    return answer


3. 다른 사람의 코드

def caesar(s, n):
    s = list(s)
    for i in range(len(s)):
        if s[i].isupper():
            s[i] = chr((ord(s[i])-ord('A') + n )% 26 + ord('A'))
        elif s[i].islower():
            s[i] = chr((ord(s[i])-ord('a') + n) % 26 +ord('a'))
    return "".join(s)

- 대문자와 소문자의 구분을 isupper()와 islower()함수를 이용해 간편하게 구분함

- 각 알파벳에 대한 이진 코드를 알 필요도 없이 'A-Z'의 경우 가장 기본이 되는 'A'값을 기준으로 이진코드를 계산하고,

'a-z'의 경우 가장 기본이 되는 'a'값을 기준으로 이진코드를 계산해서 손쉽게 계산을 수행함.

※ 위의 연산은 list를 기준으로 작성한 것이기에 마지막에 join함수를 활용해서 문자로 만들어야 한다.


4. 정리 및 리뷰

- 비교적 연습할 때, 처음에 풀었던 문제로써 많은 어려움이 있었고 유연하지 못했던 부분이 있었다.

- 다른 사람의 코드를 보고 파이썬의 함수의 편이성과 간결성에 대해서 놀랐었던 문제였다.


코드 만족도: ★★★☆☆


'알고리즘_코딩테스트 > 프로그래머스_Level1' 카테고리의 다른 글

21. 이상한 문자 만들기  (0) 2020.09.11
20. 약수의 합  (0) 2020.09.10
18. 문자열을 정수로 바꾸기  (0) 2020.09.10
17. 수박수박수박수박수박수?  (0) 2020.09.10
16. 소수 찾기  (0) 2020.09.10
Comments