프로그래머스/1레벨
둘만의 암호/C++
Koalitsiya
2023. 2. 3. 14:24
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이방법
문자열 s의 각 알파벳에 index만큼 뒤에 있는 알파벳을 구하되 문자열 skip에 있는 알파벳은 카운트하지 않아야한다.
이를 구현하기 위해 문자열 s의 각 알파벳에 index번 만큼 1을 더하였을 때 해당 알파벳이 skip에 들어있는 알파벳일 경우 반복 횟수를 한 번씩 늘려주도록 했다. 또한 s와 skip은 알파벳 소문자로만 이루어져 있으므로 s[i]에 1을 더하였을 시 아스키 코드 값이 122를 초과한다면 a가 되도록 하였다.
1. 알파벳의 검사를 위해 int형 변수 cur을 선언
2. s[i]에 ++해준다.
3. s[i]가 z보다 커지면 a로 변환하고 find함수로 s[i]가 skip안에 있는지 찾고 있다면 반복 횟수를 늘려주고 없다면 계속해서 수행한다.
4. 이를 index번만큼 반복 후 변환된 문자열 s를 리턴
#include <string>
#include <vector>
using namespace std;
string solution(string s, string skip, int index) {
int cur = 0;
for(int i = 0; i < s.size(); i++) {
for(int j = 0; j < index; j++) {
s[i]++;
if(s[i] > 'z') s[i] = 'a';
cur = skip.find(s[i]);
if(cur == -1)
continue;
else j--;
}
}
return s;
}