문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string ≤ 110
- my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
- 대문자와 소문자를 구분합니다.
- 공백(" ")도 하나의 문자로 구분합니다.
- 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.
풀이
split() 혹은 Spread Operator (전개 연산자), 그리고 filter()와 join()을 사용하면 될것 같다.
const solution = (my_string) => [...my_string].filter((el, idx, arr) => idx === arr.indexOf(el)).join("")
전개연산자를 이용해 my_string를 각 글자로 나뉘어진 배열로 만든 뒤,
filter()와 indexOf()를이용해 원본 배열에서의 현재 원소의 인덱스와, 현재 filter의 인덱스가 같은경우에만 리턴해준 뒤,
join() 매서드를이용해 다시 문자열로 합쳐주었다.
다른 다양한 풀이
이 문제는 위 방식 말고도 다양한 방법이 많을것 같아서 추가로 작성해본다.
//set()을 사용해서 중복 제거
const solution = (my_string) => [...new Set(my_string)].join("");
//reduce()와 includes()를 이용한 중복 제거
const solution = (my_string) => [...my_string].reduce((acc, cur) => {
acc.includes(cur) ? null : acc += cur;
return acc;
}, "");
set() 매서드는 나중에 다른 포스트에서 다룰 예정.
reduce()와 includes()를 사용하는 방식은 acc에 현재 원소가 포함되어 있지 않다면 추가하고, 포함되어 있다면 아무것도 하지 않는식으로 결과를 구할 수 있다.