암호 해독(Lv.0)[push(), unshift(), filter((걸러진 값 공간, 위치) => 조건식)]
군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
- 암호화된 문자열 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) 이런식으로 특정 순서 지명가능.