Problem
- An ordered sequence of numbers from 1 to N is given.
- One number might have deleted from it, then the remaining numbers were mixed.
- 한 숫자가 삭제되어 있고, 나머지 숫자는 섞여 있다.
- Find the number that was deleted.
- If no number was deleted from the array and no difference with it, your function should return the int 0.
- 숫자가 삭제되지 않았거나 차이가 없는 경우, 정수 0을 반환한다.
Solution 01
function findDeletedNum(arr, mixArr) {
for (let i = 0; i < arr.length; i++) {
if (mixArr.indexOf(arr[i]) === -1) {
return arr[i];
}
}
return 0;
}
findDeletedNum([1, 2, 3, 4], [4, 1, 3]); // 2
findDeletedNum([1, 2, 3, 4], [4, 1, 3, 2]); // 0
indexOf()
: 주어진 값이 처음으로 나타나는 위치를 반환한다. 일치하는 값이 없으면 -1을 반환한다.
Solution 02
function findDeletedNum(arr, mixArr) {
let sumArr = arr.reduce((a, b) => a + b, 0);
let sumMixArr = mixArr.reduce((a, b) => a + b, 0);
return sumArr - sumMixArr;
}
findDeletedNum([1, 2, 3, 4], [4, 1, 3]); // 2
findDeletedNum([1, 2, 3, 4], [4, 1, 3, 2]); // 0
reduce()
: 배열을 하나의 값으로 줄이고, 그 값을 반환한다.
Solution 03
function findDeletedNum(arr, mixArr) {
return arr.filter(i => mixArr.indexOf(i) === -1)[0] || 0;
}
findDeletedNum([1, 2, 3, 4], [4, 1, 3]); // 2
findDeletedNum([1, 2, 3, 4], [4, 1, 3, 2]); // 0
filter()
: 테스트를 통과한 배열의 각 값을 모아, 새 배열로 반환한다.