개발하는 kim-hasa

[c++][프로그래머스] 시저 암호 본문

Algorithm/Programmers(c++)

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

kim-hasa 2021. 8. 6. 19:16

https://programmers.co.kr/learn/courses/30/lessons/12926

 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀

programmers.co.kr

공백을 제외하고 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꿉니다.

 

처음에는 그냥 s[i]에 n을 더해서 범위를 벗어나면 빼주었지만, 그렇게되니 char상에서 이상해져서

실패가 자꾸 떴었습니다.

그래서 아예 특정 값을 더한 후 26으로 나눠서 A와 a값에 더해주었습니다.

#include <string>
#include <vector>

using namespace std;

string solution(string s, int n) {
    string answer = "";
    
    for(int i=0; i<s.size(); i++)
    {
        if(s[i] >= 65 && s[i] <= 90)  // 대문자인경우
        {
            s[i] = ((s[i] + n - 65) % 26) + 'A';
            
            answer.push_back(s[i]);
        }
        else if(s[i] >= 97 && s[i] <= 122)    // 소문자인 경우
        {
            s[i] = ((s[i] + n - 97) % 26) + 'a';
            
            answer.push_back(s[i]);
        }
        else if(s[i] == ' ')
        {
            answer.push_back(s[i]);
        }
    }
    
    return answer;
}