[Javascript] 모음 제거

아데스티·2023년 2월 19일
0

알고리즘 테스트

목록 보기
9/10

문제 설명

영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다.
문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • my_string은 소문자와 공백으로 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000

입출력 예시

console.log(solution("bus")); // "bs"
console.log(solution("nice to meet you")); // "nc t mt y"

내가 푼 방식

⛔ 오답

const solution = (my_string) => {
    return my_string.split('').filter(el => el !== 'a' && el !== 'e' && el !== 'i' && el !== 'o' && el !== 'u').reduce((acc,cur) => acc + cur);
}

이때 연산 시간에 의해 런타임 오류가 발생했습니다.
다른 사람의 풀이를 참고하여 아래와 같은 문제점을 발견했습니다.

  1. filter 조건식의 가독성
  2. 불필요한 reduce 연산

✔ 정답
이 두가지 문제를 아래와 같이 개선하였습니다.

const solution = (my_string) => {
    const str = 'aeiou';
    return my_string.split('').filter(el => str.includes(el) === false).join('');
}
  1. filter 조건식의 가독성
    배열과 include를 사용하여 어떤 조건인지 추상화하였습니다.

  2. 불필요한 reduce 연산
    acc와 cur을 파악할 필요없이, join으로 합칠 수 있었습니다.

🔺 향상된 퍼포먼스
하지만 조금 더 효율적인 방법으로 풀 수도 있었습니다.

다른 사람의 풀이를 확인하고
정규식을 통한 접근을 확인할 수 있었습니다.

const solution = (my_string) =>  my_string.replace(/[aeiou]/g,'');

'a' 'e' 'i' 'o' 'u' 를 뺀 나머지 문자열을 가지고 있으면 되므로
제외하는 정규식을 사용해 필터링 후 대체하면 됩니다.

💬 자기 피드백

  1. 문자열과 관련된 문제에서 정규식을 사용할 수 있는 지 고민한다
  2. include와 같은 메서드를 사용하여 추상화할 수 있도록 한다
  3. reduce 대신 join 처럼 단순한 메서드를 사용하는 습관을 기른다
profile
종착지이자 거점 A Destination

0개의 댓글