[프로그래머스 / lv.1] 시저 암호


날짜: 2021년 5월 31일
소요 시간: 33분 39초
카테고리: 수학 문제
태그: 레벨1, 파이썬

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

입출력 예시

snresult
“AB”1“BC”
“z”1“a”
“a B z”4“e F d”

내가 적은 코드

def solution(s, n):
    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    answer = list()
    for i in range(0,len(s)):
        if s[i].isupper():
            for j in range(0, len(alphabet)):
                if s[i] == alphabet[j].upper():
                    answer.append(alhpabet[(j+n)%26].upper())
                    break
        if s[i].islower():
            for k in range(0, len(alphabet)):
                if s[i] == alphabet[k]:
                    answer.append(alphabet[(k+n)%26])
                    break
        if s[i] == " ":
            answer.append(" ")
    return "".join(answer)

풀이 과정

문자열 s의 원소가 대문자인 경우 (첫번째 조건) 알파벳 소문자로 이루어진 문자열 alphabet을 대문자화 하여 answer에 저장
문자열 s의 원소가 소문자인 경우 (두번째 조건) 알파벳 소문자로 이루어진 문자열 alphabetanswer에 저장
문자열 s의 원소가 공백인 경우 (세번째 조건) 공백을 answer에 저장

n번째 원소가 26번째(z번쨰보다 큰 수)일 경우 26으로 나눈 나머지 번째의 원소(다시 a로 돌아감)를 출력

리스트 형인 answer에 저장 되어있는 원소를 문자형으로 출력하기 위해 join()함수를 사용

베스트 코드

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)

반성

  • 시프트로 푸는 방법을 생각은 했으나 ord()chr()함수를 몰라서 코드화 할 수 없었다.
  • 더 많은 파이썬 모듈이나 함수를 알면 더 효율적으로 코드를 짤 수 있다. 파이썬에 대한 공부가 더 필요하다.




© 2021. by hminkim