문제 정의
배열마다 동일한 문자가 여러 번 등장하는 두 개의 단일 문자(single character) 배열을 비교하고, 그 차이를 구해야 하는 경우가 있습니다.
예를 들어 다음과 같은 두 배열이 있다고 가정해 보겠습니다.
const arr1 = ['A', 'C', 'A', 'D'];
const arr2 = ['F', 'A', 'T', 'T'];
여기서는 같은 위치(인덱스)에 있는 문자끼리 하나씩 비교한 뒤, 서로 다른 문자만 골라내어 반환하면 됩니다.
해결 방법 및 예제 코드
const arr1 = ['A', 'C', 'A', 'D'];
const arr2 = ['F', 'A', 'T', 'T'];
const findDifference = (arr1, arr2) => {
const min = Math.min(arr1.length, arr2.length);
let i = 0;
const res = [];
while (i < min) {
if (arr1[i] !== arr2[i]) {
res.push(arr1[i], arr2[i]);
};
++i;
};
return res.concat(arr1.slice(min), arr2.slice(min));
};
console.log(findDifference(arr1, arr2));
코드 동작 원리
- Math.min()을 사용해 두 배열 중 더 짧은 길이를 기준값으로 구합니다.
- while 반복문을 돌면서 같은 인덱스에 있는 두 문자를 하나씩 비교합니다.
- 두 문자가 다르면 push()를 통해 첫 번째 배열의 문자와 두 번째 배열의 문자를 순서대로 결과 배열에 추가합니다.
- 두 배열의 길이가 다를 경우, 비교하지 못한 나머지 요소들은 slice()와 concat()을 이용해 그대로 결과에 포함시킵니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
[
'A', 'F', 'C',
'A', 'A', 'T',
'D', 'T'
]
결과를 자세히 살펴보면, 인덱스 0에서는 'A'와 'F', 인덱스 1에서는 'C'와 'A', 인덱스 2에서는 'A'와 'T', 인덱스 3에서는 'D'와 'T'가 각각 서로 다르기 때문에 네 위치의 여덟 개 문자가 모두 차이로 반환된 것을 확인할 수 있습니다.