본문 바로가기

내용 복습/알고리즘

프로그래머스 lv.0 특정문자 제거하기

요즘 기초를 다지기 위해 lv.0문제를 하루에 여러개씩 루틴처럼 풀고 있는데, 이런 문제에서도 배울 점이 많다는 것을 알았다.

문제는 my_string에서 letter을 제거하고 반환하는 것인데, 나는 이렇게 무식하게 풀었다. 지금 이 답을 구하는 것만은 상관이 없지만 이 로직이 다른 문제에 포함되었을 때는 쓸데없는 시간복잡도를 할애하게 해서 올바른 답을 찾는 데에 방해가 될 것이다.

function solution(my_string, letter) {
    var answer = [];
    let str = my_string.split('');
    for (let i = 0; i<str.length; i++) {
        if (str[i] !== letter) {
            answer.push(str[i])
        }
    }
    return answer.join('');
}

 

 

그래서 다른 분들의 풀이를 확인해봤다.

 

1. split()

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

제일 신박했던 풀인데 split은 어차피 해야하고 아예 letter를 split의 인자로 사용하는 것이다. 가장 효율적인 방식이지 않나 싶다.

 

2. replaceAll()

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

잘 사용하지 않던 메소드인에 이런 상황에서 빛을 발하는 것을 보니 기억해둬야 겠다 싶다.

 

3. filter()

function solution(my_string, letter) {
    return Array.from(my_string).filter(t => t !== letter).join('');
}

일단 split 메소드가 아닌 Array.from이라는 유사 배열 객체에서 얕게 복사된 인스턴스를 만드는 방식에 filter를 얹은 풀이이다. 애초에 나는 filter가 손에 익지않아 잘 안 썼는데, 이런 풀이도 많이 봐야겠다는 생각이 들었다.