코테를 풀다 다른분 답안에 신기한게 있어서 뜯어보았다.
문제는 이랬다.
자 이제 이 답안을 뜯어보자.
일단 or 연산자에 대해 다시 살펴보자.
OR 연산자. (기본이 2항 연산자임.)
- boolean 값을 반환한다. boolean 형이 아니면 boolean 으로 변환한다.
- 인수들 중 하나라도 true 이면 true를 반환한다.
- 모두 false 이면 false를 반환.
OR 연산자 의 체인. 여러개인 경우.
- 피연산자가 여러개인 경우, 왼쪽에서 오른쪽으로 실행된다. 값이 true 인게 발견되면 바로 멈추고, 변환 전 원래의 값을 반환한다.
- 모든 값이 false인 경우 맨 마지막 피연산자를 변환전 원래값으로 반환한다.
OR 연산자 의 단락평가.
- boolean 값을 반환한다. boolean 형이 아니면 boolean 으로 변환한다.
- 조건이 false일때에만 명령어를 실행하고자 할 때에 주로 쓰인다.
- true를 만나면 나머지 값은 건드리지 않고 평가 멈춤.
true || alert("not printed");
false || alert("printed");
뜯어보려는 답안은 이랬다.
return +!(number % n || number % m)
지금 저 풀이방법의 경우 이항연산에 해당하기 때문에, 둘중 하나라도 해당하면 의 접근으로 봐야한다.
나머지 값에 따른 결과값을 봐보자.
저 괄호 안이 0이거나 혹은 어떠한 숫자가 나오거나 둘중 하나이기 때문에, 일단 아무 숫자나 넣어서 살펴본다.
(0, 3) __ true
(3, 0) __ true
(0, 0) __ false
(3, 3) __ true
n,m둘다 나머지 값이 0일 경우에만 false를 내어준다.
! 연산자
- 값이 boolean 이라면 거꾸로 뒤집어 준다 (true 면 false로, false라면 true 로)
- 값이 boolean 이 아니라면 boolean 값으로 바꿔서 거꾸로 뒤집어 준다.
+ 연산자 ( 단항 연산자)
- 숫자 타입이 아닌 것들에게만 영향을 미친다.
- 숫자 타입이 아닐 경우에는 숫자타입으로 변환해서 반환 한다.
그러니까 () 안에서 false를 가지고 나와서는,
!false 를 함으로 true 가 되고,
+ true는 숫자로 변형되어 1 을 리턴한다.

엇? 만약에 2항이 아니라 3항이면 뭔가 달라지지 않았을까?
아니다 동일하다. 😆😂
//콘솔창에 테스트 해보았당..
let value1 = 0;
let value2 = 3;
let value3 = 7;
value1 || value2 || value3;
콘솔창에 찍히는 값은 3 이다.
설명대로 마지막 값도 true 이지만, 리턴하지 않았다.
그런데 처음에 코테 문제로 돌아가서 잘 살펴보면, !!
모든 값이 0일 경우에만 1을 결과적으로 주게 되어있고,
하나라도 true가 될만한 값이 들어있는 경우 모두 0을 리턴하도록 되어있다.
그러니 2항 이였던, or연산자의 체인이였던 상관이 없었던것..... ㅎ....
'코딩테스트' 카테고리의 다른 글
최빈값 구하기__ 정답 풀이 (0) | 2023.09.21 |
---|---|
문자열의 끝에 이 문자가 있니? endWith() / substr() (0) | 2023.09.13 |
비트 연산자 _ shift operator (<<) (0) | 2023.09.08 |
함수의 파라미터로 받은 문자열을 obj 형식으로 알파벳 당 개수 보이게 만들기. (1) | 2023.09.06 |
var / let / const 확실히 알기 (0) | 2023.06.26 |