배열에 포함된 여러 값 중에서 정확히 두 번 나타나는 요소만 골라 새로운 배열로 반환하는 JavaScript 함수를 작성해야 합니다.
예를 들어 입력 배열이 [0, 1, 2, 2, 3, 3, 5]라면, 숫자 2와 3이 각각 두 번씩 등장하므로 최종 결과는 [2, 3]이 되어야 합니다.
구현 예제
이 문제를 해결하는 코드는 다음과 같습니다 −
const arr = [0, 1, 2, 2, 3, 3, 5];
const findAppearances = (arr, num) => {
let count = 0;
for(let i = 0; i < arr.length; i++){
const el = arr[i];
if(num !== el){
continue;
};
count++;
};
return count;
};
const pickAppearingTwice = (arr = []) => {
const res = [];
for(let i = 0; i < arr.length; i++){
const el = arr[i];
if(findAppearances(arr, el) === 2 && !res.includes(el)){
res.push(el);
};
};
return res;
};
console.log(pickAppearingTwice(arr));
코드 동작 원리
위 코드가 어떻게 작동하는지 단계별로 살펴보겠습니다.
1. findAppearances 함수
findAppearances 함수는 배열(arr)과 특정 값(num)을 인자로 받아, 해당 값이 배열 안에 총 몇 번 등장하는지 세어 그 횟수를 반환합니다. 반복문을 순회하면서 현재 요소가 찾으려는 값과 일치하지 않으면 continue로 건너뛰고, 일치하면 카운트를 하나씩 증가시킵니다.
2. pickAppearingTwice 함수
pickAppearingTwice 함수는 배열의 모든 요소를 순회하며 각 요소의 등장 횟수를 findAppearances로 확인합니다. 등장 횟수가 정확히 2번이고, 아직 결과 배열(res)에 포함되어 있지 않은 경우에만 해당 요소를 추가합니다. includes 체크 덕분에 같은 값이 결과에 중복해서 들어가는 것을 방지할 수 있습니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다 −
[2, 3]
숫자 0, 1, 5는 한 번씩만 등장하고, 2와 3은 정확히 두 번씩 등장하기 때문에 최종 결과 배열에는 [2, 3]만 포함됩니다.