프로그래머스 - 둘만의 암호
프로그래머스 문제 링크
입력값으로 string s, string skip, int index가 주어질 때 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꾼 문자열을 반환하는 solution 함수를 만들어라
단, skip에 있는 알파벳은 제외하고 건너뛰어야 한다.
#include <string>
using namespace std;
string solution(string s, string skip, int index) {
string answer = "";
for(char& c:s){
// count: skip의 알파벳을 제외하고 index만큼 건너뛸 때 실제 건너뛴 횟수
int count = 0;
// cFind: s의 알파벳 c에서 i만큼 건너뛴 알파벳
char cFind;
for(int i = 0; i<index; ){
count++;
// z 다음 a부터 시작하도록 설정
cFind = (c + count % 26) > 'z' ?
'a' - 1 + (c + count % 26) % 'z' : c + count % 26;
// skip에 cFind가 없는 경우에만 i++
if(skip.find(cFind) == string::npos){
i++;
}
}
answer += cFind;
}
return answer;
}
skip에 있는 알파벳은 넘어간것으로 인덱스를 카운트하지 않기 위해 count 변수를 따로 만들어 증가시켰다.s의 알파벳에 count를 더한 값이 소문자 'a' ~ 'z'만 나오도록 값을 가공했다.count만큼 증가한 알파벳이 skip에 없는 경우에만 i를 증가시켜 인덱스와 비교하도록 했다.