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

2021. 3. 27. 14:58필요/코딩테스트(프로그래머스)

문제

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

 

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

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

programmers.co.kr

풀이

#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] == ' ') {	// 공백인 경우
            answer+=s[i];
        }
        else {
            if (s[i] < 'a') {	// 대문자인 경우
                if (s[i]+n > 'Z') {
                    answer+=s[i]+n-26;
                    }
                else {
                    answer+=s[i]+n;
                    }
            }
            else {	// 소문자인 경우
                if (s[i]+n > 'z') {
                    answer+=s[i]+n-26;
                }
                else {
                    answer+=s[i]+n;
                }
            }
        }
    }
    return answer;
}

개념

문자"이 아니라 '를 사용해서 나타낸다. 이를 "(문자열)로 사용하면 에러가 발생한다. 

 

문제에서는 따로 언급이 없지만, 시저암호에서 소문자와 마찬가지로 대문자도 Z->A 이다. 

풀이

3가지를 구분해줘야한다.

1. 공백인 경우

2. 소문자인 경우

3. 대문자인 경우

 

1, 2, 3을 하나의 if문으로 각각의 상황을 나눈다.

2와 3에서 s[i]+n이 Z 또는 z를 넘는지를 한번 더 나눠서 문제를 해결한다.