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()
: 테스트를 통과한 배열의 각 값을 모아, 새 배열로 반환한다.