GitHubSeob

C++ / 프로그래머스 / 시저 암호 본문

Programmers/Level 1

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

GitHubSeob 2021. 9. 13.

문제

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

 

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

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

programmers.co.kr

문제풀이

대문자는 A~Z를 돌고, 소문자는 a~z를 돈다.

A는 아스키코드가 65Z는 90, a는 97z는 122이다.

대문자는 65로 나눈 나머지를 26으로 나눈 나머지를 구하고 65를 더하면 n칸 이동한 값이 나온다.

소문자는 97로 나눈 나머지를 26으로 나눈 나머지를 구하고 97을 더하면 n칸 이동한 값이 나온다.

 

코드

#include <string>
#include <vector>

using namespace std;

string solution(string s, int n) {
    string answer = "";
    int idx = 0;
    for (idx = 0; idx < s.size(); ++idx) {
        if (s[idx] >= 65 && s[idx] <= 90)
            answer.push_back((s[idx] + n) % 65 % 26 + 65);
        else if (s[idx] >= 97 && s[idx] <= 122)
            answer.push_back((s[idx] + n) % 97 % 26 + 97);
        else answer.push_back(' ');
    }
    return answer;
}