Algorithm

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

채햔 2021. 9. 15. 03:22

시저암호는 문자열 s에 있는 알파벳들을 n만큼 밀어서 다른 알파벳으로 만드는 암호화 방식이다.

 

조건

  • 공백은 아무리 밀어도 공백입니다.
  • s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
  • s의 길이는 8000이하입니다.
  • n은 1 이상, 25이하인 자연수입니다.

소문자와 대문자는 따로 생각하는 것!

 

최종작성한 코드이다.

def solution(s, n):
    answer = ""				#민 문자열을 저장할 변수
    al_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"	#대문자 리스트
    al_small="abcdefghijklmnopqrstuvwxyz"	#소문자 리스트
    i=0						#s문자열을 인덱싱할 값
    for alpha in s:
        ss=""
        if alpha == " ":
            ss=s[i]
        elif alpha in al_big:
            al_index = al_big.index(alpha)
            if al_index+n>25:
                al_index=al_index-26
            ss=al_big[al_index+n]
        elif alpha in al_small:
            al_index = al_small.index(alpha)
            if al_index+n> 25:
                al_index=al_index-26
            ss=al_small[al_index+n]
        i+=1
        answer+=ss
    return answer

#참고한 함수

list.index("A") : list에서 "A"의 인덱스

 

#알파벳 리스트에서 앞으로 넘어가는 부분을 고려하는게 어려웠다.

s아이템의 값이 Z/z일 때를 고려하기보다는, 현재 인덱스에서 밀어야할 n을 더한 값이 25(알파벳리스트의 마지막인덱스)를 넘어가면 어떻게 할지를 고려해야 함.


#아스키코드 이용해서 풀면 깔끔!

알파벳리스트로 작성한 부분을 아스키코드를 이용해 작성할 수 있음
#ord: 문자를 아스키코드로 변환
#chr: 아스키코드를 문자로 변환