Dia Egg - Shugo Chara

Python공부/프로그래머스

(Python)시저 암호(프로그래머스Lv.1)

별ㅇI 2023. 6. 14. 03:49
728x90
반응형

시저 암호(프로그래머스Lv.1)

https://school.programmers.co.kr/learn/courses/30/lessons/12926

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 코드

def solution(s, n):
    answer = ''
    s = list(s)
    for i in range(len(s)):
        if s[i] != ' ':
            if ord('a') <= ord(s[i]) <=ord('z'):
                if ord('a') <= ord(s[i])+n <=ord('z'):
                    s[i] = chr(ord(s[i])+n)
                else:
                    s[i] = chr(ord(s[i])+n-26)
            elif ord('A')<= ord(s[i]) <=ord('Z'):
                if ord('A')<= ord(s[i])+n <=ord('Z'):
                    s[i] = chr(ord(s[i])+n)
                else:
                    s[i] = chr(ord(s[i])+n-26)
            else:
                    s[i] = chr(ord(s[i])+n-26)
            
        
    answer = ''.join(s)    
    return answer

간략하게 할 방법이 생각이 안나서 경우대로 적긴했는데 굉장히 난잡하다...

참고로 테스트 6번 쯤에서 오류가 나는 분들은 대문자가 소문자를 넘어가는 경우를 고려해보길 바란다.

코드의 개선을 위해 다른 분이 작성하신 베스트코드를 가져와봤다.

 

def solution(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)

 

 

728x90
반응형