코딩 공부/코딩테스트

코딩테스트 연습문제 Lv. 1 (8) - 둘만의 암호

천서리 2023. 6. 18. 01:50
QUOTE THE DAY

“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”

- 이글슨 (Eagleson)
반응형

코딩테스트 연습문제  Lv. 1

출처  https://programmers.co.kr/

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


둘만의 암호

문제

두 문자열 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 함수를 완성해주세요.

 

 

 

제한사항

  • 5 ≤ s의 길이 ≤ 50
  • 1 ≤ skip의 길이 ≤ 10
  • s와 skip은 알파벳 소문자로만 이루어져 있습니다.
    • skip에 포함되는 알파벳은 s에 포함되지 않습니다.
  • 1 ≤ index ≤ 20

 

입출력 예

s skip index result
"aukks" "wbqd" 5 "happy"

 

입출력 예 설명

 

입출력 예 #1

  • 본문 내용과 일치합니다.

 

solution.js

function solution(s, skip, index) {
    const alpha = 'abcdefghijklmnopqrstuvwxyz'.split('').filter(x => !skip.includes(x)).join('');
    let answer = "";
    
    for(let i = 0; i < s.length; i++) {
        answer += alpha[(alpha.indexOf(s[i]) + index) % alpha.length];
    }
    
    return answer;
}
  1. alpha 변수에는 알파벳 문자열을 저장합니다. skip에 포함되지 않은 알파벳만 필터링하여 저장하도록 구성되어 있습니다. split('') 메서드를 사용하여 문자열을 배열로 변환한 후, filter 메서드를 이용하여 skip에 포함되지 않은 알파벳만 남겨둡니다. 마지막으로 join('') 메서드를 사용하여 배열을 다시 문자열로 변환합니다.
  2. 초기화된 answer 변수에 빈 문자열을 할당합니다.
  3. for 루프를 통해 주어진 문자열 s의 각 문자에 대해 변환을 수행합니다.
  4. answer 변수에 alpha에서 변환된 문자를 추가합니다. alpha.indexOf(s[i])를 통해 현재 문자의 인덱스를 찾고, index를 더한 후 alpha.length로 나눈 나머지를 구합니다. 이를 통해 알파벳의 순환을 처리합니다.
  5. answer를 반환하여 결과를 출력합니다.

 

반응형
Adventure Time - BMO