필요/코딩테스트(프로그래머스)
[프로그래머스/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를 넘는지를 한번 더 나눠서 문제를 해결한다.