[프로그래머스 자바스크립트] Lv.1 둘만의 암호

전유정·2023년 4월 22일

프로그래머스

목록 보기
4/4

문제

둘만의 암호

❓ 문제 설명

두 문자열 s와 skip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다.

문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다.
index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다.
skip에 있는 알파벳은 제외하고 건너뜁니다.
예를 들어 s = "aukks", skip = "wbqd", index = 5일 때, a에서 5만큼 뒤에 있는 알파벳은 f지만 [b, c, d, e, f]에서 'b'와 'd'는 skip에 포함되므로 세지 않습니다. 따라서 'b', 'd'를 제외하고 'a'에서 5만큼 뒤에 있는 알파벳은 [c, e, f, g, h] 순서에 의해 'h'가 됩니다. 나머지 "ukks" 또한 위 규칙대로 바꾸면 "appy"가 되며 결과는 "happy"가 됩니다.

두 문자열 s와 skip, 그리고 자연수 index가 매개변수로 주어질 때 위 규칙대로 s를 변환한 결과를 return하도록 solution 함수를 완성해주세요.

📜 문제 풀이

내 풀이

사용한 메서드는 다음과 같다.

alpha.replace(alpha[j], ‘’) : 문자열에서 특정 문자를 삭제할 때 사용할 메서드


function solution(s, skip, index) {
    let alpha = 'abcdefghijklmnopqrstuvwxyz';
    let idx = 0;
    let answer = '';
    let alphabet = '';
    
    for (let i = 0; i < skip.length; i++) {
        for(let j = 0; j < alpha.length; j++){
              if(alpha[j] == skip[i])
                 alpha = alpha.replace(alpha[j], '');
        }
    }
    for (let i = 0; i < s.length; i++){
        idx = alpha.indexOf(s[i]) + index;
            idx= idx % alpha.length;
        answer += alpha[idx];
    }
    return answer;
}

우선 첫 번째 for문에서 전체 알파벳 문자열 (alpha)에서 skip 배열에 있는 요소들을 뺐다.

두 번째 for문에선 문자열 s의 각 알파벳을 index 만큼 뒤에 알파벳으로 바꿔주기 위해서,
1. 전체 알파벳 문자열 (alha)에서, indexOf를 통해 s[i]의 인덱스 번호를 찾았고, index를 더해줬다.
2. 이제 idx 변수에는 전체 알파벳 문자열(alpha)에서 변경된 알파벳의 인덱스 번호가 담겨있다.
3. answer에 alpha[index]를 리턴해준다.

profile
깨달음을 얻고 롱런하는 공간

0개의 댓글