🗃️javascript/프로그래머스

암호 해독(Lv.0)[push(), unshift(), filter((걸러진 값 공간, 위치) => 조건식)]

하얀성 2023. 1. 3. 12:04
<문제 설명>

 

군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.

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

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


제한사항
  • 1 ≤ cipher의 길이 ≤ 1,000
  • 1 ≤ code  cipher의 길이
  • cipher는 소문자와 공백으로만 구성되어 있습니다.
  • 공백도 하나의 문자로 취급합니다.

입출력 예ciphercoderesult
"dfjardstddetckdaccccdegk" 4 "attack"
"pfqallllabwaoclk" 2 "fallback"

입출력 예 설명

입출력 예 #1

  • "dfjardstddetckdaccccdegk" 의 4번째, 8번째, 12번째, 16번째, 20번째, 24번째 글자를 합친 "attack"을 return합니다.

입출력 예 #2

  • "pfqallllabwaoclk" 의 2번째, 4번째, 6번째, 8번째, 10번째, 12번째, 14번째, 16번째 글자를 합친 "fallback"을 return합니다.

<제출답안>

 

배열.unshift( )-> 배열 맨 앞부분에 원하는 값 넣기 // 배열.shift(); 첫 값 빼기

배열.push( )  -> 배열 맨 뒷부분에 원하는 값 넣기 // 배열.pop(); 마지막 값 빼기(배열길이 감소)

 

 

function solution(cipher, code) {
    let result = []; 
    cipher.split("");
     for(let i= 0; i<cipher.length; i++){
        if(i+1 % code === 0){
         result.unshift(cipher[i+1])
        }
     }
     return result
}

 

"dfjardstddetckdaccccdegk", 4
기댓값 "attack"
실행 결과 실행한 결괏값 []이 기댓값 "attack"과 다릅니다.
테스트 2
입력값 "pfqallllabwaoclk", 2
기댓값 "fallback"
실행 결과 실행한 결괏값 []이 기댓값 "fallback"과 다릅니다.

result에 cipher에서 내가 원하는 차례의 요소가 안들어간다. 이유를 모르겠다.

 


ㅡㅡㅡㅡㅡㅡㅡ>안되는 이유

1.

if(i+1 % code === 0) 이 조건문이 잘 못 되서였다. %기호가 우선순위가 더 놓으니 그랬다.

(i+1)로 괄호를 쳐줘야 된다. 연산자 우선순위를 잘 보자.

 

2.

result에 cipher 요소들은 잘어 간다. 그러나 unshift를 쓰면 반대로 나온다. attack이 아니라 kcatta로 나옴.


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

 

수정 제출결과.

 


<보충 내용>

 

if(i+1 % code === 0) 이 조건문이 잘 못 되서였다. %기호가 우선순위가 더 놓으니 그랬다.

(i+1)로 괄호를 쳐줘야 된다. 연산자 우선순위를 잘 보자.

 

2.

result에 cipher 요소들은 잘어 간다. 그러나 unshift를 쓰면 반대로 나온다. attack이 아니라 kcatta로 나옴.

 

3.

const solution = (cipher, code) => [...cipher].filter((a,i) => (i+1)%code === 0).join("")

filter에 이런식으로 순서에 맞게끔 해줄 수 있음.

filter(a, index) 이런식으로 특정 순서 지명가능.