내 맘대로 공부
article thumbnail

Q. 문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.

  • 암호화된 문자열 cipher를 주고받습니다.
  • 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.

 

ex) 입출력 예시

cipher code result
"pfqallllabwaoclk" 2 "attack"
"dfjardstddetckdaccccdegk" 4 "fallback"

 


Thinking Process

code의 배수 번째 글자만 진짜 암호니 배수에 해당하는 글자의 인덱스를 code로 나누면 나머지가 0이 되겠지? 그럼 배수에 해당하는 index 번호를 알아내고 그걸 code로 나눈 값이 0이 되는 값을 새롭게 배열로 만들어서 리턴하면 되겠다

 

 

Code

case1)

function solution(cipher, code) {
  let arr = [];
  for (let i = 1; i <= cipher.length; i++) {
    if (i % code === 0) {
      arr.push(cipher[i - 1]);
    }
  }

  return arr.join('');
}

처음 생각했던 것대로 안 됐던 이유가 배열은 제로넘버링인데, code의 배수에 해당하는 값의 인덱스 값은 1부터 시작했을 때의 값이기 때문이었다. 그러면 code가 4인 경우 인덱스 값이 3, 7, 11, 15이므로 code의 배수에 해당하는 값의 -1을 해주면 해결 !

 

case2)

function solution(cipher, code) {
  return cipher
    .split('')
    .filter((el, idx) => {
      return idx % code === code-1;
    })
    .join('');
}

case1의 코드를 작성하고 보니 충분히 고차함수를 이용할 수 있을 것이라는 생각이 들었다. 다만 filter 부분에서 위에서 언급한 문제를 고려하여 인덱스 값을 code로 나누었을 때 0인 값이 아니라 code에서 -1을 한 값이 되는 요소를 filter하도록 하였다.

 

자세히 살펴보자면 입출력 예시 두 번째의 경우 "fallback" 결과가 나오기 위해서는 4,8,12,16,20,24,28,32번째 값이 나와야 할 것이다. 하지만 배열은 제로넘버링이므로 3,7,11,15,19 - 번째 값들을 추출해야하는데, 3%4 === 3, 7%4 === 3, 11%4 === 3 모두 나머지가 3 즉, 4에서 -1한 값을 가지는 공통점을 가지므로 이를 코드화하면 위와 같이 된다.

profile

내 맘대로 공부

@곰도리도리잼

잘못된 정보가 있다면 알려주세요 🧸