Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 배열에서 유일하게 다른 숫자 찾는 방법

```html

문제 설명

모든 요소가 동일한 값으로 이루어져 있지만 단 하나의 요소만 다른 숫자인 배열이 주어집니다. 이때 유일하게 다른 숫자를 찾아 반환하는 JavaScript 함수를 작성해야 합니다.

풀이 접근 방법

배열의 길이는 최소 3이라고 가정합니다. 인접한 세 개의 요소를 차례로 비교하면서 어느 요소가 나머지와 다른지 판별하는 방식으로 문제를 해결할 수 있습니다.

  • 현재 요소가 이전 요소와 다르고 다음 요소와 같다면 → 이전 요소가 다른 숫자입니다.
  • 현재 요소가 앞뒤 요소 모두와 다르다면 → 현재 요소가 다른 숫자입니다.
  • 현재 요소가 이전 요소와 같고 다음 요소와 다르다면 → 다음 요소가 다른 숫자입니다.

구현 코드

const arr = [2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4];

// 배열의 길이는 최소 3이라고 가정합니다.
const findUnlike = arr => {
  for(let i = 1; i < arr.length - 1; i++){
    // 현재 요소가 앞 요소와 다르고 뒤 요소와 같으면
    if(arr[i] - arr[i-1] !== 0 && arr[i] - arr[i+1] === 0){
      return arr[i-1];
    }
    // 현재 요소가 앞뒤 요소 모두와 다르면
    else if(arr[i] - arr[i-1] !== 0 && arr[i] - arr[i+1] !== 0){
      return arr[i];
    }
    // 현재 요소가 앞 요소와 같고 뒤 요소와 다르면
    else if(arr[i] - arr[i-1] === 0 && arr[i] - arr[i+1] !== 0){
      return arr[i+1];
    };
  };
};
console.log(findUnlike(arr));

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

2

더 간결한 대안 방법

Array.prototype.find() 메서드를 활용하면 훨씬 간단하게 구현할 수도 있습니다. 배열의 처음 몇 개 요소를 비교해 공통 값을 구한 뒤, 그 공통 값과 다른 첫 번째 요소를 반환하는 방식입니다.

const findUnlike = arr => {
  const common = arr[0] === arr[1] ? arr[0] : arr[2];
  return arr.find(x => x !== common);
};
console.log(findUnlike([7, 7, 7, 7, 13, 7]));

위 코드 역시 배열에서 유일하게 다른 값인 13을 정확히 출력합니다. 반복문 기반 풀이는 로직을 단계별로 이해하기 좋고, find() 활용 풀이는 코드가 짧고 가독성이 뛰어나다는 장점이 있습니다.