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

11140 단어 pspythonps

문제

접근 방법

  • 문장의 알파벳을 하나씩 아스키코드로 바꾼 뒤 n 만큼 밀어줌

이전에 C++로 풀었던 내용

#include <string>
#include <vector>

using namespace std;

string solution(string s, int n) {
    string answer = "";
    
    for(int i = 0; i < s.size(); i++){
        if('a' <= s[i] && s[i] <= 'z' && s[i] + n > 'z')
            answer += (s[i] + n -26);
        else if('A' <= s[i] && s[i] <= 'Z' && s[i] + n > 'Z')
            answer += (s[i] + n -26);
        else if(s[i] == ' ')
            answer += ' ';
        else 
            answer += s[i] + n;
    }
  
    return answer;
}

나의 풀이

def solution(s, n):
    answer = ''
    
    for c in s:
        temp = ord(c) + n
        if ('A' <= c and c <= 'Z') and temp > 90:
            answer += chr(temp - 26)
            
        elif ('a' <= c and c <= 'z') and temp > 122:
            answer += chr(temp - 26)
            
        elif c == ' ':
            answer += ' '
            
        else:
            answer += chr(ord(c) + n)

            
            
    return answer

밀었을 때 알파벳을 범위를 넘어가는 문자들 처리해주는 것은 금방 해결했지만
알파벳의 대소문자 사이의 간격이 26이 안된다는 점에서 처리하는게 까다로웠다.
아스키코드 표를 보며.. 하나하나 조건을 따져 직접 넣어주었다ㅜㅜ

다른 사람의 풀이

def solution(s, n):
    answer = ''
    
    for c in s:
        if c.isupper():
            answer += chr((ord(c)-ord('A')+ n)%26+ord('A'))
            
        elif c.islower():
            answer += chr((ord(c)-ord('a')+ n)%26+ord('a'))
        
        else:
            answer += c
        
    return answer

대,소문자를 구별해주는 메서드가 있었다니...
알파벳을 밀었을 때 z를 넘어가는지 안넘어가는지 크기로 비교할게 아니라 나머지를 이용하면 됐다니...
아직 문자열 다루는 것이 많이 미숙한 것 같다 ( ˃̣̣̥᷄⌓˂̣̣̥᷅ )

좋은 웹페이지 즐겨찾기