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

 

Level 1문제이고, 스스로 푼 문제다!

맨 아래있는 풀이로 처음에 작성했으나 61.5%에서 틀리길래 왜 그런지 생각해봤다

문제에 의하면 소문자는 소문자로 이동하고, 대문자는 대문자로 이동해야하는데 

대문자의 아스키 코드는 65 ~ 90 

소문자의 아스키 코드는 97 ~ 122

 

대문자에 n(1 ~ 25)을 더한 값의 범위는 66 ~ 115 이다. 이때 97 ~ 115인 경우는 소문자의 영역이므로 문자의 order값에 n을 더한 값이

97 ~ 115라면 이게 소문자에서 시작한 건지, 대문자에서 시작한건지 모호하다 

 

소문자인 경우와 대문자인 경우로 나누어서 진행하고 n을 더한값이 해당 문자의 끝을 넘어간다면 n을 더한 order 값에서 26을 빼주는 로직으로 하면 정답이 뜬다  

 

- 정답 풀이 :

def solution(s, n):  
    s = list(s)
    answer = ''
    for i in range(len(s)):   
        if 65 <= ord(s[i]) <= 90:
            num = ord(s[i]) + n 
            if 65 <= num <= 90:
                s[i] = chr(num)
            elif num > 90:
                s[i] = chr(num - 26)            
        elif 97 <= ord(s[i]) <= 122:
            num = ord(s[i]) + n
            if 97 <= num <= 122:
                s[i] = chr(num)
            elif num > 122 :
                s[i] = chr(num - 26)
                
    for i in range(len(s)):
    	answer += s[i]
    
    return answer

 

- 시도해본 풀이 

이렇게 풀면 안된다!

def solution(s, n):  
    s = list(s)
    answer = ''
            
        #이동한게 'A'부터 'Z' 사이 
        if 65 <= ord(s[i]) + n <= 90:
            s[i] = chr(ord(s[i]) + n)     
         #'a'이상 문자가 이동한게 'a'부터 'z'사이 
        elif 97 <= ord(s[i]) + n <= 122 :
            s[i] = chr(ord(s[i]) + n)
        #이동한게 'Z'를 벗어남 
        elif 90 < ord(s[i]) + n < 116 :
            s[i] = chr(ord(s[i]) + n - 26) 
        #'z'보다 큰 경우 
        elif 122 < ord(s[i]) + n :
            s[i] = chr(ord(s[i]) + n - 26)

    for i in range(len(s)):
        answer += s[i]
    
    return answer

+ Recent posts