해밍 거리(Hamming Distance)란?
해밍 거리는 길이가 같은 두 문자열에서 서로 다른 문자가 나타나는 위치의 개수를 의미합니다.
다르게 표현하면, 한 문자열을 다른 문자열로 변환하기 위해 필요한 최소한의 변경(치환) 횟수라고 할 수 있습니다. 해밍 거리는 일반적으로 길이가 동일한 문자열에 대해서만 측정됩니다.
구현 목표
이번 글에서는 길이가 같은 두 문자열 str1과 str2를 인자로 받아, 두 문자열 사이의 해밍 거리를 계산하여 반환하는 자바스크립트 함수를 작성해 보겠습니다.
동작 방식
함수의 로직은 매우 간단합니다.
- 먼저 두 문자열의 길이가 같은지 확인합니다.
- 같다면 반복문으로 각 위치의 문자를 하나씩 비교합니다.
- 대소문자 차이로 인한 오탐을 방지하기 위해 toLowerCase()로 소문자로 통일한 뒤 비교합니다.
- 두 문자가 다르면 카운터(distance)를 1씩 증가시킵니다.
- 최종적으로 카운터 값을 반환하고, 길이가 다르면 0을 반환합니다.
예제 코드
const str1 = 'Hello World';
const str2 = 'Heeyy World';
const findHammingDistance = (str1 = '', str2 = '') => {
let distance = 0;
if (str1.length === str2.length) {
for (let i = 0; i < str1.length; i++) {
if (str1[i].toLowerCase() !== str2[i].toLowerCase()) {
distance++;
}
}
return distance;
}
return 0;
};
console.log(findHammingDistance(str1, str2));실행 결과
위 코드를 실행하면 콘솔에 아래와 같은 결과가 출력됩니다.
3
결과 분석
'Hello World'와 'Heeyy World'를 비교해 보면, 세 번째 위치(l → e), 네 번째 위치(l → y), 다섯 번째 위치(o → y)에서 문자가 서로 다릅니다. 따라서 해밍 거리는 3이 됩니다.
이처럼 해밍 거리는 오류 검출·정정 코드, DNA 서열 비교 등 다양한 분야에서 활용되는 기본적인 개념이며, 위와 같은 간단한 반복문만으로도 손쉽게 구현할 수 있습니다.