본문 바로가기
자기개발/TIL

프로그래머스 lv.0 암호해독.js

by 금화맘 2023. 6. 24.

오늘은 프로그래머스의 암호해독을 가지고 js의 map, filter, reduce 사용법을 익혀봤다.

 

var answer = [...cipher].map((char,i)=>{char.filter((i)=> i%code ===0)}).join('');

내가 풀었던 거는 이랬다. 역시나 오류가 났다. filter를 쓸때도 배열이어야 하는데 char는 내가 그냥 부여한 가상의 어쩌고여서 사용할 수 없었다. 

 

그래서 오늘도 유용하고 도움이 많이 되는 도구에게 물어봤다.

var answer = '' ;
         for (let i = code - 1; i < cipher.length; i += code) {
        answer += cipher[i];
    }

을 줬다.. 포문으로 돌리는게 가장 정상적인 방법이지.. 나도 안다.. 그렇지만 map,filter, reduce를 익히고 싶은 내겐 도움이 되는게 아니었다.

그래서 다시 map과 filter를 써달라고 하니

var answer = [...cipher].filter((char, index) => (index +1) % code === 0).join('');

이렇게 줬다.. map과 필터를 둘다 쓸 필요가 없구나...

 

다시한번 map과 filter , reduce를 정독해야 겠다고 생각했다..

 

코드를 확인하는데 배수인데 (index +1) % code === 0매번 이렇게 0과 같음을 적으로고 하니 코드가 긴거 같았다. 다른 짧게 할 수 있는 방법이 없을까 고민했다. 

나는 그냥 code*2를 하면 되지 않을까 했는데 (index +1) % code === 0 이렇게 쓰는 걸 보고 내가 생각한게 또 틀렸나보다 했다..  그리고 직접 작성해 보니 index2이후의 모든 글자가 반환됐다. 

 

이왕 이렇게 된거 map과 reduce를 만들어 봤다.

var answer = [...cipher].map((char, index) => (index + 1) % code === 0 ? char : '').join('');

 

answer = [...cipher].reduce((acc,char,index) => (index+1)%code ===0 ? acc+char : acc,'')

사실 reduce로 변환하는 건 오류가 났었다.  {(index+1)%code ===0 ? acc+char : acc,''})로 하니까 undefind가 떳고 ""를 0으로 하니 또 이상한 답이 나왔다.

 

왜 어떤 때는 {}를 써야 답이 나오고 없어야 나오는지 잘 모르겠다. 무슨 차이지..? ,''는 초기값 아니었나...?

'자기개발 > TIL' 카테고리의 다른 글

영어 면접을 봤습니다.  (0) 2023.06.27
프로그래머스 js 최대값 만들기(2)  (0) 2023.06.26
reduce 익히기  (0) 2023.06.24
수학 어렵네..  (0) 2023.06.22
내가 영어 면접을 보다니?  (0) 2023.06.21