문제 상황
길이가 m인 문자열에 영어 알파벳의 처음 m개 글자가 들어 있다고 가정해 봅시다. 그런데 어떤 이유에서인지 한 글자가 사라져서 현재 문자열에는 m-1개의 글자만 남아 있습니다.
우리는 이러한 문자열을 입력받아 빠진 글자를 찾아 반환하는 함수를 작성해야 합니다.
해결 방법
가장 간단하고 직관적인 접근 방식은 알파벳 'a'부터 차례대로 순회하면서 해당 글자가 문자열에 포함되어 있는지 확인하는 것입니다. 포함되어 있으면 다음 글자로 넘어가고, 포함되어 있지 않다면 그 글자가 바로 누락된 문자입니다.
함수의 일관성을 높이기 위해 입력 문자열을 먼저 소문자로 변환한 뒤 검사를 진행합니다. 그럼 코드를 작성해 보겠습니다.
예제 코드
const str = "acdghfbekj";
const missingCharacter = str => {
// 함수의 일관성을 위해 소문자로 변환
const s = str.toLowerCase();
for(let i = 97; ; i++){
if(s.includes(String.fromCharCode(i))){
continue;
};
return String.fromCharCode(i);
};
return false;
};
console.log(missingCharacter(str));코드 설명
ASCII 코드에서 소문자 'a'는 97번이므로, 반복문은 i = 97부터 시작합니다. String.fromCharCode() 메서드를 사용해 숫자를 해당하는 문자로 변환하고, includes() 메서드로 문자열 내 존재 여부를 검사합니다. 존재하지 않는 첫 번째 문자를 만나는 즉시 그 문자를 반환하며, 모든 검사가 끝나면 false를 반환하도록 처리했습니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
i
입력 문자열 "acdghfbekj"에는 a부터 k까지의 알파벳 중 'i'가 빠져 있으므로, 함수는 정확히 'i'를 반환합니다. 이 방법은 시간 복잡도 면에서 효율적이며, 어떤 위치의 글자가 누락되었더라도 안정적으로 찾아낼 수 있습니다.