문제

시저암호 프로그래머스 level 1

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

제한 조건
  • 공백은 아무리 밀어도 공백입니다.
  • s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
  • s의 길이는 8000이하입니다.
  • n은 1 이상, 25이하인 자연수입니다.
입출력 예
s n result
AB 1 BC
z 1 a
a B z 4 e F d

리뷰

테스트 케이스 일부를 통과 못해서 다른사람들의 질문답변을 읽고 도움을 받았다.

char는 1byte니까 1부터 128까지다. 근데 소문자 z는 122이고 25가 더해지는 경우 128을 초과한다.

소문자를 변환할때 (unsigned char) 로 캐스팅해서 테케를 전체 통과했다.


코드

#include <string>
#include <vector>

using namespace std;
string solution(string s, int n) {

    string answer = "";
    int s_len = s.length();
    int i = 0;

    for(i=0; i < s_len; i++){

        if(s[i] <= 90 && s[i] >= 65 ){ // 대문자  

            s[i] = s[i] + n;

            if(s[i] > 90){
                s[i] = s[i]  + 64 - 90;
            }

            answer += s[i];

        }else if(s[i] == ' '){ // 공백  

            answer += " ";

        }else if(s[i] <= 122 && s[i] >= 97){ // 소문자 

            s[i] += n;

            if((unsigned char)s[i] > 122){
                s[i] = s[i] -122 + 96;
            }

            answer += s[i];
        }
    }

    return answer;
}
728x90

'알고리즘 > 프로그래머스' 카테고리의 다른 글

두 정수 사이의 합  (0) 2020.07.17
문자열 내 마음대로 정렬하기  (0) 2020.07.17
문자열 다루기 기본  (0) 2020.07.17
다리를 지나는 트럭  (0) 2020.07.16
소수찾기 (에라토스테네스의 체)  (0) 2020.07.16

+ Recent posts