문제 설명

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


제한사항

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

입출력 예

my_stringresult
"bus""bs"
"nice to meet you""nc t mt y"

입출력 예 설명

입출력 예 #1

  • "bus"에서 모음 u를 제거한 "bs"를 return합니다.

입출력 예 #1

  • "nice to meet you"에서 모음 i, o, e, u를 모두 제거한 "nc t mt y"를 return합니다.

✍ SOLUTION1

const solution = (my_string) => {
    const alphabet = ['a', 'e', 'i', 'o', 'u'];
    return Array.from(my_string).filter(item => alphabet != item).join("");
}

/* 처음에 작성한 코드이다. 당연히 정답일줄 알았는데 계속 undefind가 나와서 혼자 멘붕왔다..
오류 찾고 너무 어이없었던 문제이다ㅎㅎ 수정한 코드는 바로 아래에 작성해보겠다. */
const solution = (my_string) => {
    const alphabet = ['a', 'e', 'i', 'o', 'u'];
    return Array.from(my_string).filter(item => !alphabet.includes(item)).join("");
}

/* 위의 코드에서 오류 찾아서 수정한 코드이다ㅠㅠ 위에 코드에선 filter 콜백함수에 alphabet != item
으로 작성해주었는데 이렇게 작성해주면 alphabet 배열 안에 요소들과 비교해주는게 아닌 배열 자체와 비교를
하기 때문에 항상 true가 반환된다. 올바르게 동작하려면, filter 콜백 함수에서 alphabet 배열에 
item이 포함되어 있는지를 체크해야 한다. 이를 위해 !alphabet.includes(item)을 사용해주었다.
다음엔 이런 실수 하지않도록 해야겠다. */
const solution = (my_string) => 
Array.from(my_string).filter(x=>!['a', 'e', 'i', 'o', 'u'].includes(x)).join("");

/* 위의 코드에서 alphabet 변수를 빼고 더 간략하게 작성해 보았다. */

✍ SOLUTION2

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

/* 다른분의 풀이를 보다가 되게 간단하게 풀수있는 방법을 알게되어 공부할겸 작성해본다.
 
my_string.replace(/[aeiou]/g, '');
이 부분은 문자열에서 특정 패턴을 찾아 다른 값으로 대체하는 메서드인 replace를 사용해주었다. 
여기서 사용된 정규 표현식은 /[aeiou]/g 이다. 

a, e, i, o, u : 각각의 문자가 해당 문자들과 매치되어야 한다.
/ : 정규 표현식의 시작과 끝을 나타내는 기호이다.
g : global의 약자로, 문자열 내에서 모든 패턴과 매치되는 모든 부분을 찾도록 지정한다.

따라서 my_string.replace(/[aeiou]/g, '')는 문자열 my_string에서 a, e, i, o, u 
다섯 개의 모음을 모두 찾아 빈 문자열('')로 대체하여 모음을 제거한 문자열을 반환하게 된다. */

출처 : 프로그래머스 스쿨 | 코딩테스트 연습

0개의 댓글