코딩 테스트나 프로그래밍 문제에서 자주 등장하는 개념인 '문자열의 가중치(weight)'를 JavaScript로 계산하는 방법을 알아보겠습니다.
알파벳 문자의 가중치란?
영어 알파벳의 가중치는 별도의 규칙 없이 단순히 1부터 시작하는 인덱스(1-based index) 값입니다.
예를 들어, 'a'의 가중치는 1, 'c'의 가중치는 3, 'k'의 가중치는 11과 같습니다.
따라서 우리는 소문자로 이루어진 문자열을 입력받아, 문자열 내 모든 문자의 가중치 합계를 계산하여 반환하는 JavaScript 함수를 작성해야 합니다.
구현 예제 코드
이를 구현한 코드는 다음과 같습니다.
const str = 'this is a string';
const calculateWeight = (str = '') => {
str = str.toLowerCase();
const legend = 'abcdefghijklmnopqrstuvwxyz';
let weight = 0;
const { length: l } = str;
for(let i = 0; i < l; i++){
const el = str[i];
const curr = legend.indexOf(el);
weight += (curr + 1);
};
return weight;
};
console.log(calculateWeight(str));
코드 동작 원리
toLowerCase()메서드를 사용해 입력 문자열을 모두 소문자로 변환합니다.- 알파벳 순서가 담긴
legend문자열에서indexOf()로 각 문자의 위치(0부터 시작)를 찾고, 여기에 1을 더해 1-based 가중치를 구합니다. - 공백처럼 알파벳이 아닌 문자는
indexOf()가 -1을 반환하므로-1 + 1 = 0이 되어 합계에 영향을 주지 않습니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
172
'this is a string'이라는 문자열의 각 알파벳 가중치를 모두 더하면 172가 되며, 공백은 가중치 0으로 처리됩니다.