본문 바로가기

Algorithm/Programers - C++

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

문제

 

풀이

#include <string>
#include <vector>
#include <cctype>
using namespace std;

string solution(string s, int n) {
    string answer = "";
    for(auto &a : s){
        if(islower(a)){
            a+=n%26;
            if(!islower(a))
                a-=26;
        }
        else if(isupper(a)){
            a+=n%26;
            if(!isupper(a))
                a-=26;
        }
    }
    return s;
}

만약 'z'인 상태에서 숫자 n을 더하게 되면, 그 문자는 더 이상 소문자가 아니게 되어버리기 때문에

islower을 사용해 소문자인지 아닌지 구별한 후, 아니라면(z 이상의 숫자가 되어버린다면)

-26을 해 주어 z> a> b> c> d... 순서로 바뀌게끔 해주었다.

대문자도 마찬가지!