문제 소개
이번 글에서는 소문자 영어 알파벳 문자 하나를 입력받아, 해당 문자가 알파벳에서 몇 번째 위치하는지 1부터 시작하는 인덱스(1-based index)로 반환하는 JavaScript 함수를 작성해 보겠습니다.
예를 들어 'a'는 1을, 'b'는 2를, 'j'는 10을 반환해야 합니다.
해결 아이디어
가장 간단한 방법은 알파벳 전체를 담은 참조 문자열(legend)을 만들어 두고, indexOf() 메서드로 문자의 위치를 찾는 것입니다.
여기서 핵심 트릭은 참조 문자열 맨 앞에 공백 한 칸을 추가하는 것입니다. 이렇게 하면 'a'의 인덱스가 0이 아닌 1이 되므로, 별도의 연산 없이 곧바로 1 기반 인덱스를 얻을 수 있습니다.
예제 코드
const char = 'j';
const findCharIndex = (char = '') => {
const legend = ' abcdefghijklmnopqrstuvwxyz';
if (!char || !legend.includes(char) || char.length !== 1) {
return -1;
}
return legend.indexOf(char);
};
console.log(findCharIndex(char));
코드 설명
- legend 문자열: 앞에 공백을 포함한 알파벳 문자열로, 공백 덕분에 'a'가 인덱스 1에 위치합니다.
- 유효성 검사: 입력값이 비어 있거나, 알파벳에 포함되지 않거나, 길이가 1이 아니면 -1을 반환합니다.
- indexOf(): 유효한 문자라면 legend에서의 위치, 즉 1부터 시작하는 알파벳 순번을 그대로 반환합니다.
출력 결과
10
'j'는 알파벳에서 열 번째 문자이므로, 위 함수는 정확히 10을 출력합니다.