/**
* @param {number[]} arr
* @return {boolean}
*/
// My solution
var checkIfExist = function (arr) {
for (let i = 0; i < arr.length; i++) {
if (arr.includes(arr[i] / 2) && arr.indexOf(arr[i] / 2) !== i) return true;
}
return false;
};
// Set
var checkIfExist = function (arr) {
let set = new Set();
for (const item of arr) {
if (set.has(item * 2) || set.has(item / 2)) return true;
set.add(item);
}
return false;
};
let arr = [10, 2, 5, 3];
checkIfExist(arr);
위는 내가 푼 방법이다. 처음에는 includes
조건 하나만 사용했었으나, 요소 중 0이 있는 경우는 false
로 반환해야 하지만 true
로 반환하기 때문에, (0/2 === 0) arr.indexOf(arr[i] / 2) !== i)
라는 조건을 추가해줬다.
아래의 방법은 리뷰 때 새로 배운 방법으로, set
을 사용한 방법이다. set
에 값을 담아놓고 반복문을 돌며 has
메서드를 통해 이미 있는 값(item*2
or item / 2
)이면 바로 true
를 return
하는 방법이다.
수정, 지적을 환영합니다!
https://leetcode.com/problems/check-if-n-and-its-double-exist/