본문 바로가기
카테고리 없음

[프로그래머스] Level1 시저 암호(with python)

by 윤무무 2023. 2. 1.

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

 

프로그래머스

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

programmers.co.kr

1. 내가 작성한 코드
def solution(s, n):
    s = list(s)
    a = ''

    for i in s:
        if ord(i) == 32:
            a += ' '
        else:
            num = ord(i)
            if 90 >= num >= 65:
                if num + n > 90:
                    a += chr(num + n - 26)
                else:
                    a += chr(num + n)
            else:
                if num + n > 122:
                    a += chr(num + n -26)
                else:
                    a += chr(num + n)
    return a

isupper, islower 이라는 함수가 있는지 몰라서 아스키코드로 해결했다.

 

if문의 if문을 쓰는 상당히 복잡한 코드,,

 

1. 띄어쓰기가 있을 때는 그냥 띄어쓰기를 문자열에 추가

2. 대문자일 경우(아스키코드가 65에서 90사이) n을 더한 값이 Z보다 아스키코드가 크면 -26 한 바퀴 빼준 후 문자열에 추가

3. 소문지일 경우(아스키코드가 122보다 큼) n을 더한 값이 z보다 아스키코드가 크면 -26 한 바퀴 빼준 후 문자열에 추가

 

2. 다른 코드

 

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)

 

 

댓글