기초 트레이닝 공배수 문제를 풀고 다른 사람의 풀이를 보던 중 다음과 같은 코드를 보게 되었다.
function solution(number, n, m) {
return +!(number % n || number % m);
}
number가 n의 배수이면서 m의 배수면 1을 아니면 0을 return하는 문제인데
왜 boolean값에 +연산을 하는지 궁금해서 찾아보았다.
mdn 문서 단항 더하기(+)
단항 더하기 연산자(+)는 피연산자 앞에 위치해 피연산자를 그대로 반환하지만, 만약 피연산자가 숫자가 아니라면 숫자로 변환을 시도한다고 한다.
const x = 1;
const y = -1;
console.log(+x); //1
console.log(+y); //-1
console.log(+''); //0
console.log(+true); //1
console.log(+false); //0
console.log(+'hello'); //NaN
또한, 동등연산자에서
console.log(1==true); //true
console.log(0==false);//true
로 나온다.
(number % n || number % m )의 경우의 수는
0||0 → 0
0||1 → 1
1||0 → 1
1||1 → 1
!(number % n || number % m )연산을 하면
0||0 → 0 → !0 → true
0||1 → 1 → !1 → false
1||0 → 1 → !1 → false
1||1 → 1 → !1 → false
+!(number % n || number % m )연산을 하면
0||0 → 0 → !0 → true → +true → 1
0||1 → 1 → !1 → false → +false → 0
1||0 → 1 → !1 → false → +false → 0
1||1 → 1 → !1 → false → +false → 0
이렇게 최소공배수가 아닐 경우엔 모두 0이 나오게 된다.
엄청나다😮