정수 배열이 주어졌을 때, 배열 안에서 홀수 번 나타나는 유일한 요소를 찾아 반환하는 함수를 작성해야 합니다.
문제의 조건상 홀수 번 등장하는 정수는 항상 하나뿐이라고 보장됩니다. 이 문제는 배열을 먼저 정렬한 뒤 접근하면 효율적으로 해결할 수 있습니다. 배열을 오름차순으로 정렬하면 같은 값들이 서로 인접하게 배치되므로, 배열을 한 번만 순회하면서 각 값의 등장 횟수를 세고 홀수 번 등장한 요소를 곧바로 찾아낼 수 있습니다.
동작 원리
코드의 핵심 로직은 다음과 같습니다.
- 배열을 오름차순으로 정렬하여 동일한 값을 연속으로 모읍니다.
- 직전에 확인한 값(
last)과 현재 값이 같으면 카운트(count)를 1씩 증가시킵니다. - 새로운 값이 나타나면, 지금까지 센 횟수가 홀수인지 검사하고 홀수라면 직전 값을 결과로 반환합니다.
- 짝수라면 새로운 값부터 다시 카운트를 시작합니다.
예제 코드
const arr = [20, 1, -1, 2, -2, 3, 3, 5, 5, 1, 2, 4, 20, 4, -1, -2, 5];
const findOdd = arr => {
let count = 0;
let last;
arr.sort((a, b) => a - b);
for (let i = 0; i < arr.length; i++){
if (arr[i] === last) {
count++;
continue;
};
if(count % 2){
return last;
};
last = arr[i];
count = 1;
};
return last;
};
console.log(findOdd(arr));실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
5
배열에서 5는 세 번 등장하는 유일한 값이므로, 함수는 홀수 번 나타나는 요소인 5를 정확히 반환합니다.