본문 바로가기

코딩테스트/Python

[프로그래머스] 시저 암호

휴,, 왜 이렇게 공부하기싫지? 1단계 너무많다^^.. ㅋㅋㅋㅋㅋ 

 

내 코드

def solution(s, n):
    answer = ''
    
    a = [ 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    b = [i.upper() for i in a]
    
    answer = ""
    
    for i in s:
        if i>='a' and i<='z':
            answer+=a[(a.index(i)+n)%26]
        elif i>='A' and i<='Z':
            answer+=b[(b.index(i)+n)%26]
        else:
            answer+=i
            
    return answer

좀 비효율적이게 짠거같다ㅠㅠ 일단 코드를 설명하겠다,,

먼저 a는 소문자 리스트, b는 대문자 리스트를 만든다.

인덱스에 n만큼 더하고 알파벳 갯수인 26을 나눠 나머지를 a와 b에서 각각찾는다.

만약 문자가 아니면 그냥 더한다.

 

다른사람 코드

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()가 있구나,,, ㅠㅠ 처음 알았다.. 휴.. 외우자!!! 

이 분은 별도의 답 리스트를 만들지 않고 s를 리스트로 만들어 s에 대입하는 식으로 푸셨다.

 

 

chr


chr(i)는 유니코드(Unicode) 값을 입력받아 그 코드에 해당하는 문자를 출력하는 함수이다.

>>> chr(97)
'a'
>>> chr(44032)
'가'

 

ord


ord(c)는 문자의 유니코드 값을 돌려주는 함수이다. ord 함수는 chr 함수와 반대이다.

>>> ord('a')
97
>>> ord('가')
44032