stray.js (7kyu 34)

Codewars 알고리즘 풀이


Problem

  • You are given an odd-length array of integers, in which all of them are the same, except for one single number.
    • 하나의 숫자를 제외하고 모두 동일한, 홀수 길이의 정수 배열이 주어진다.
  • Complete the method which accepts such an array, and returns that single different number.
    • 다른 숫자를 반환하는 메소드를 작성한다.


Solution 01

function stray(numbers) {
  let arr = numbers.sort();
  
  if (arr[0] !== arr[1]) {
    return arr[0];
  } else {
    return arr[arr.length - 1];
  }
}

stray([1, 1, 1, 2]);  // 2
stray([4, 4, 8, 4]);  // 8

sort(): 배열의 element를 정렬한 후, 그 배열을 반환한다.


Solution 02

function stray(numbers) {
  for (let i = 0; i < numbers.length; i++) {
    if (numbers.indexOf(numbers[i]) === numbers.lastIndexOf(numbers[i])) {
      return numbers[i];
    }
  }
}

stray([1, 1, 1, 2]);  // 2
stray([4, 4, 8, 4]);  // 8

indexOf(): 주어진 값이 처음으로 나타나는 위치를 반환한다. 일치하는 값이 없으면 -1을 반환한다.

lastIndexOf(): 주어진 값이 마지막으로 나타나는 위치를 반환한다. 일치하는 값이 없으면 -1을 반환한다.


Solution 03

function stray(numbers) {
  let max = Math.max(...numbers);
  let min = Math.min(...numbers);
  
  return numbers.filter(i => i === max).length === 1 ? max : min;
}

stray([1, 1, 1, 2]);  // 2
stray([4, 4, 8, 4]);  // 8

Math.max(): 값이 가장 큰 수를 반환한다.

Math.min(): 값이 가장 작은 수를 반환한다.

filter(): 테스트를 통과한 배열의 각 값을 모아, 새 배열로 반환한다.