Post

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

문제


문제를 보시려면 링크를 클릭해주세요.


풀이


풀이 1은 알파벳을 밀었을 때, z를 넘기는 경우와 그렇지 않은 경우를 나눠서 계산하였습니다.

풀이 2는 알파벳 개수가 26개임을 활용해 그 나머지 값으로 계산하여 z를 넘기는 것에 영향을 미치지 않게하였습니다.


소스 코드


풀이 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <string>

using namespace std;

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


풀이 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <string>

using namespace std;

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



This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.