문자열 배열을 다룰 때, 각 문자열에 중복된 문자가 포함되어 있는 경우가 있습니다. 예를 들어 다음과 같은 배열이 있다고 가정해 보겠습니다.
const arr = ['54gdgdfe3', '434ffd', '43frdf', '43fdhnh', 'wgcxhjny', 'fsdf34'];
이번 글에서는 이러한 배열을 입력으로 받아, 중복 문자가 하나도 없는(모든 문자가 고유한) 첫 번째 요소를 반환하는 JavaScript 함수를 작성해 보겠습니다. 만약 조건을 만족하는 문자열이 존재하지 않는다면 false를 반환해야 합니다.
해결 접근 방식
핵심 아이디어는 다음과 같습니다.
1. 문자열을 개별 문자로 분리합니다.
2. 각 문자에 대해 indexOf()와 lastIndexOf()의 결과가 동일한지 확인합니다. 두 값이 같다면 해당 문자는 문자열 내에서 한 번만 등장한다는 의미입니다.
3. 모든 문자가 이 조건을 통과하면 해당 문자열은 중복이 없는 것입니다.
예제 코드
const arr = ['54gdgdfe3', '434ffd', '43frdf', '43fdhnh', 'wgcxhjny', 'fsdf34'];
// 문자열에 중복 문자가 있는지 검사하는 함수
const isUnique = str => {
return str.split('').every(el => str.indexOf(el) === str.lastIndexOf(el));
};
// 배열에서 중복 없는 첫 번째 문자열을 찾는 함수
const findUniqueString = arr => {
for(let i = 0; i < arr.length; i++){
if(isUnique(arr[i])){
return arr[i];
}
}
return false;
};
console.log(findUniqueString(arr));코드 설명
isUnique 함수는 split('')으로 문자열을 문자 단위 배열로 변환한 뒤, every() 메서드를 사용해 모든 문자가 고유한지 검사합니다. indexOf(el)은 해당 문자가 처음 등장하는 위치를, lastIndexOf(el)은 마지막으로 등장하는 위치를 반환하므로, 두 값이 일치하면 그 문자는 한 번만 나타난다는 뜻입니다.
findUniqueString 함수는 배열을 순회하면서 각 요소에 대해 isUnique를 호출하고, 조건을 만족하는 첫 번째 문자열을 즉시 반환합니다. 끝까지 조건을 만족하는 요소가 없다면 false를 반환합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
wgcxhjny
배열의 앞부분에 있는 '54gdgdfe3', '434ffd', '43frdf', '43fdhnh'는 모두 중복 문자를 포함하고 있지만, 'wgcxhjny'는 모든 문자가 고유하므로 첫 번째 결과로 반환됩니다.