문제 정의
영어 소문자 알파벳으로 구성된 문자열 배열을 입력받는 JavaScript 함수를 작성해야 합니다.
이 함수는 입력 배열을 새로운 배열로 변환(map)해야 하며, 결과 배열의 각 요소는 해당 문자열 안에서 문자 자신의 위치(1부터 시작하는 인덱스)와 영어 알파벳에서의 위치(1부터 시작하는 인덱스)가 서로 일치하는 문자의 개수를 의미합니다.
예를 들어 문자열 'akcle'의 경우 결과값은 3입니다. 그 이유는 문자 'a', 'c', 'e'가 문자열 내에서도, 영어 알파벳에서도 각각 1번째, 3번째, 5번째 위치에 존재하기 때문입니다.
예제 코드
const arr = ["abode", "ABc", "xyzD"];
const findIndexPairCount = (arr = []) => {
const alphabet = 'abcdefghijklmnopqrstuvwxyz';
const res = [];
for (let i = 0; i < arr.length; i++) {
let count = 0;
for (let j = 0; j < arr[i].length; j++) {
if (arr[i][j].toLowerCase() === alphabet[j]) {
count++;
}
}
res.push(count);
}
return res;
};
console.log(findIndexPairCount(arr));코드 동작 방식
위 코드의 핵심 로직은 다음과 같습니다.
먼저 기준이 되는 알파벳 문자열 'abcdefghijklmnopqrstuvwxyz'를 상수로 선언합니다. 이때 알파벳 문자열의 인덱스 j는 곧 해당 문자의 알파벳상 순서(0부터 시작)와 같습니다.
그다음 외부 반복문으로 배열의 각 문자열을 순회하고, 내부 반복문으로 문자열의 각 문자를 검사합니다. 이때 toLowerCase()를 호출하여 대문자가 포함된 경우에도 소문자로 통일한 뒤 비교하므로, 'ABc'처럼 대소문자가 섞인 문자열도 올바르게 처리할 수 있습니다.
현재 인덱스 j의 문자가 알파벳 문자열의 같은 인덱스 j에 있는 문자와 일치하면 카운트를 1 증가시키고, 문자열 하나가 끝날 때마다 누적된 개수를 결과 배열에 저장합니다.
출력 결과
[ 4, 3, 1 ]
결과를 해석해 보면 다음과 같습니다.
'abode'는 'a'(1번째), 'b'(2번째), 'o'(15번째), 'e'(5번째)로 총 4개의 문자가 위치 조건을 만족하고, 'ABc'는 대소문자를 무시했을 때 'a', 'b', 'c' 모두 일치하여 3개, 'xyzD'는 'd'만 일치하므로 1개가 됩니다.