해밍 거리란 무엇인가?
해밍 거리(Hamming Distance)는 길이가 같은 두 문자열에서 서로 다른 기호가 위치한 자리의 개수를 의미합니다. 즉, 같은 위치에 있는 문자들을 하나씩 비교했을 때 일치하지 않는 횟수를 세면 됩니다.
예를 들어 다음과 같은 두 문자열이 있다고 가정해 보겠습니다.
const str1 = 'delhi';
const str2 = 'delph';
이 두 문자열의 해밍 거리는 2입니다. 네 번째 문자('h'와 'p')와 다섯 번째 문자('i'와 'h')가 서로 다르기 때문입니다. 참고로 해밍 거리를 계산하려면 반드시 두 문자열의 길이가 같아야 한다는 전제 조건이 필요합니다.
따라서 우리는 두 개의 문자열(예: str1과 str2)을 인자로 받아 두 문자열 사이의 해밍 거리를 반환하는 JavaScript 함수를 작성해야 합니다.
구현 코드 예제
다음은 해밍 거리를 계산하는 함수의 전체 코드입니다.
const str1 = 'delhi';
const str2 = 'delph';
const hammingDistance = (str1 = '', str2 = '') => {
// 길이가 다르면 해밍 거리를 정의할 수 없으므로 0 반환
if (str1.length !== str2.length) {
return 0;
}
let dist = 0;
// 같은 위치의 문자를 순서대로 비교
for (let i = 0; i < str1.length; i += 1) {
if (str1[i] !== str2[i]) {
dist += 1;
}
}
return dist;
};
console.log(hammingDistance(str1, str2));
코드 동작 원리
함수의 로직을 단계별로 살펴보면 다음과 같습니다.
1단계: 먼저 두 문자열의 길이를 비교합니다. 길이가 다르면 해밍 거리를 계산할 수 없으므로 0을 반환합니다.
2단계: 차이를 저장할 변수 dist를 0으로 초기화한 뒤, for 반복문으로 각 인덱스의 문자를 하나씩 비교합니다.
3단계: 문자가 서로 다를 때마다 dist 값을 1씩 증가시키고, 반복이 끝나면 최종 결과를 반환합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 출력이 나타납니다.
2
'delhi'와 'delph'는 네 번째, 다섯 번째 문자에서만 차이가 나므로 해밍 거리인 2가 정상적으로 출력됩니다. 이 알고리즘은 시간 복잡도 O(n)으로 문자열을 한 번만 순회하므로 매우 효율적이며, 오류 검출 코드나 유전자 서열 비교 등 다양한 분야에서 활용됩니다.