카테고리 없음

JS map의 활용/ split의 활용 / replaceAll 의 활용

GABOJOK 2023. 5. 28. 20:16

프로그래머스 문제를 풀고 다른 사람들의 풀이를 보는데, 배울점이 많아서 정리한다. 

 

문제 설명

문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ my_string의 길이 ≤ 100
  • letter은 길이가 1인 영문자입니다.
  • my_string과 letter은 알파벳 대소문자로 이루어져 있습니다.
  • 대문자와 소문자를 구분합니다

 

입출력 예

my_string letter result
"abcdef" "f" "abcde"
"BCBdbe" "B" "Cdbe"

 

 

나의 풀이는 이랬다.

function solution(my_string, letter) {
    let answer = [...my_string].map(p => p ===letter ? p="" : p=p).join("");
    return answer;
}

 

map을 이용해서 괄호 안에 함수를 넣어주는데,

화살표 함수로 넣어주었다. 

그리고 함수의 동작 프로세스는 삼항연산자로 넣어주었다.

처음에 오류생김...

왜인지 봤더니 삼항연산자 : 이 기호를 | 이거로 썼기 때문이여....었,,,,,,다,,,,,,,,ㅎㅎㅎㅎㅎ

 

덕분에 삼항연산자 제대로 짚고, 처음으로 map까지 활용해서 나는 나름 만족한 문제풀이였다. 

근데 다른분들 풀이 보니깐 정말 생각도 못한 방법들,,,,,,ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

내가 보고 배워야 겟다고 생각했던 풀이는 정말 많았는데, 배우고 싶은거 몇개만 추려보자면

 

1.    split( )  

특정 문자를 기준으로 잘라내서 배열로 만든다. 

function solution(my_string, letter) {
    const answer = my_string.split(letter).join('')
    return answer;
}

 

예를 들어보자.

 

let a = "hey! who are you?";

console.log(a.split("h"));

 

 

결과는 이랬다.

[ '', 'ey! w', 'o are you?' ]

2.   replaceAll(  )

function solution(my_string, letter) {
    return my_string.replaceAll(letter, "");
}

 

 

       1) replace( )   

     특정 문자를 찾아서 바꾼다.

     단 처음으로 찾은  문자만 바꾸며, 뒤에 또다시 나오는 같은 문자는 바꾸지 않는다. 

      

        let a = "hello";

        console.log(a.replace("l",""));            // 결과값은 helo

 

 

     2) replaceAll( )

     예전에는 자바에만 있고, 자바스크립트 에서는 이 기능이 지원되지 않아서,

     replace와 정규식을 사용해야만 특정문자를 연속적으로 찾아서 바꿀 수 있었다. 

     여기서 g는 모든 값에 대한 검사를 한다는 의미이며,

     i는 대문자, 소문자 구분을 하지 않겠다는 의미이다. 

 

     예를들면,

     let a = "pan water pan water Pan water";

     console.log(a.replace(/pan/gi, "mango"));

 

     출력값은    mango water mango water mango water

 

   아래는 replace를 이용해서 정규표현식을 이용해서 문제풀이를 한 경우이다. 

문제는 뭐였냐??!!  

my_string이라는 문자열 타입의 데이터에서 특정 문자들"a","e","o","u","i" 만 제거하고 결과값을 내야 햇다. 

function solution(my_string) {
    return my_string.replace(/[aeiou]/g, '');
}

여기서 기억할 점은

제거하고 싶은 문자들을 하나의 배열에 문자열 타입 구분 없이 그냥 넣어주었고,

그 배열 앞과 뒤에는 /를 넣어 주었고,

그 뒤에는 정규표현식에서 모두다~~ 라는 의미였던 g를 넣어주었다.     

 

     그런데!!!   이제는 지원이 된다는 사실!!!! 아낌없이 팍팍 사용해주자!!

 

     예를들면,

     let a = "pan water pan water Pan water";

     console.log(a.replaceAll("pan", "mango"));

 

     출력값은    mango water mango water Pan water

 

     엥?? 근데 Pan은 변환이 안됬다.

     이를 통해 알 수 있다 !!!!!👀

     replaceAll( ) 이라는 기능은 전체 검색해서 치환하는 기능은 제공하지만,

     단순히 이것만 사용해서는 대소문자를 구분 할 수 없다.