[C++] 프로그래머스 - 둘만의 암호

김세희·2025년 6월 20일

✍️Today I Learned

프로그래머스 - 둘만의 암호


문제 설명

프로그래머스 문제 링크
입력값으로 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;
}

코드 설명

  1. skip에 있는 알파벳은 넘어간것으로 인덱스를 카운트하지 않기 위해 count 변수를 따로 만들어 증가시켰다.
  2. s의 알파벳에 count를 더한 값이 소문자 'a' ~ 'z'만 나오도록 값을 가공했다.
  3. count만큼 증가한 알파벳이 skip에 없는 경우에만 i를 증가시켜 인덱스와 비교하도록 했다.

0개의 댓글