이 문제는 쉽지만 falsy 또는 truthy 값을 boolean값 사이간에 자유롭게 변환하는 방법
에 대해서 터득했기 때문에 정리겸 올린다. 즉 1 <-> true, 0 <-> false임을 나타낸다.
먼저 python을 보자면 문제에서 true는 1로 false는 0으로 변환하여 return하라고 한다. 기본적으로 조건문의 평가된 값은 boolean값으로 이것을 1또는 0으로 바꾸기 위해서는 아래와 같이 if-else 구문이 더 필요하게 된다.
def solution(ineq, eq, n, m):
if eq == "=":
if ineq == "<":
return 1 if n <= m else 0
return 1 if n >= m else 0
if eq == "!":
if ineq == "<":
return 1 if n < m else 0
return 1 if n > m else 0
따라서 반복적인 if-else 구문에 대해서 좀 더 코드를 간결하게 줄여보고 싶다는 생각에 how to convert truty and falsy value to 1 and 0 in python
로 구글링을 하니 여기에서 찾을 수 있었다. truthy or falsy 값을 int로 형변환
을 해 주면 원하는 대로 출력할 수 있다.
바뀐 코드 👇
def solution(ineq, eq, n, m):
if eq == "=":
return int(n <= m) if ineq == "<" else int(n >= m)
return int(n < m) if ineq == "<" else int(n > m)
python에서 int() 메서드로 형 변환을 해 주었는데 javascript는 Number()
라는 builtin method가 있다. 혹시나 이게 되려나 해서 적용해 봤는데 된다!!!
function solution(ineq, eq, n, m) {
if (eq === "=") return ineq === "<" ? Number(n <= m) : Number(n >= m)
return ineq === "<" ? Number(n < m) : Number(n > m)
}
추가적으로 logical Not Not 연산자 !!
를 사용하면 truthy or falsy 값을 true 또는 false
로 간편하게 바꿀 수 있다. !!
이 아니더라도 Boolean()
을 사용하면 똑같은 결과를 얻을 수 있다.
왜
!
가 두 개 붙었을까 생각해봤는데!
를 하나로 이용하면부정 연산으로서 true 또는 false
값만을 뱉는데 다시 not연산을 하여 값이 가지고 있는 것이 true인지 false인지 알 수 있기 때문에두 개
가 붙은 것 같다.test = 0 console.log(test) // 0 console.log(!test) // true console.log(!!test) // false
사용예시는 아래와 같다.
// using Logical Not Not operator
!!false; // false
!!undefined; // false
!!null; // false
!!NaN; // false
!!0; // false
!!''; // false
// using Boolean() method
Boolean(false); // false
Boolean(undefined); // false
Boolean(null); // false
Boolean(NaN); // false
Boolean(0); // false
Boolean(''); // false
문제를 풀면서 스스로 이게 가능한가? 다른 방법은 없나?
라는 고민을 가지고 문제를 풀 때 한 문제를 풀더라도 많이 배울 수 있는 것 같다. 결국 코드를 줄여보고자 하는 의지에서 다른 개념을 배울 수 있었다. 이렇게 꼬리에 꼬리를 물어 많은 지식을 얻는 것은 좋지만 무지 드릴링이 심한 나이기에 적당한 선에서 멈추는 것도 필요하다.
convert truthy and falsy value to int
convert between truthy and falsy value to boolean type