문제 개요
JavaScript 함수를 작성하여 문자열을 입력받고, 중복되지 않은 문자(한 번만 등장하는 문자)를 모두 제거한 새로운 문자열을 반환해야 합니다. 즉, 두 번 이상 등장하는 문자만 남기는 것이 핵심입니다.
예를 들어, 입력 문자열이 다음과 같다면 −
"teeth_foot"
출력 결과는 다음과 같아야 합니다.
"teetoot"
위 예제에서 'h', '_', 'f'는 각각 한 번만 등장하므로 제거되고, 't', 'e', 'o'처럼 여러 번 등장하는 문자만 남게 됩니다.
구현 방법
이 문제는 split()으로 문자열을 배열로 변환한 뒤, filter()와 indexOf(), lastIndexOf()를 활용해 해결할 수 있습니다. 어떤 문자의 첫 번째 인덱스와 마지막 인덱스가 서로 다르다면, 그 문자는 두 번 이상 등장한 것입니다.
예제 코드
const str = 'teeth_foot';
const removeNonDuplicate = str => {
const strArray = str.split("");
const duplicateArray = strArray.filter(el => {
return strArray.indexOf(el) !== strArray.lastIndexOf(el);
});
return duplicateArray.join("");
};
console.log(removeNonDuplicate(str));
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
teetoot
코드 설명
- str.split(""): 문자열을 한 글자씩 분리하여 배열로 만듭니다.
- filter(): 각 문자에 대해 조건을 검사하여 중복된 문자만 남깁니다.
- indexOf(el) !== lastIndexOf(el): 첫 등장 위치와 마지막 등장 위치가 다르면 해당 문자는 최소 두 번 등장한 것입니다.
- join(""): 필터링된 문자 배열을 다시 하나의 문자열로 합칩니다.