문제
정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1, 다르면 -1을 return하도록 solution 함수를 완성해 주세요.
제한사항
- 0 < num1 ≤ 10,000
- 0 < num2 ≤ 10,000
입출력 예
num1 | num2 | result |
2 | 3 | -1 |
11 | 11 | 1 |
7 | 99 | -1 |
내가 작성한 답안
function solution(num1, num2) {
var answer = 0;
if(num1 !== num2){
answer = -1;
}else{
answer = 1;
}
return answer;
}
매개변수 값의 비교는 엄격한 동등 연산자인 일치 연산자(strict equality operator) '==='를 사용하였다. 일치 연산자는 자료형의 동등 여부까지 검사하기 때문에, 형 변환 없이 값을 비교하여 두 매개변수의 형이 다를 경우 false를 반환하기 때문이다.
또한 num1이 1 ~ 10,000 중 n일때 num2도 n일 확률보다 일치하지 않을 확률이 더 크다고 생각되어 !==를 먼저 작성하였다. 일치하지 않을 가능성 확률이 더 큰데 일치하는지를 먼저 확인하게 되면 (num1 === num2를 if에 먼저 작성하게 되면) 컴퓨터가 해석하는데 시간이 더 지체되지 않을까? 하는 생각이었다.
일치 연산자의 경우 문제의 제한사항에 num1과 num2가 정수형임이 명시되어있으니 동등 연산자(equality operator) '==' 를 사용해도 된다. 다만 코테를 처음 풀어보는 상황이라 오류를 명확하게 짚어낼 수 있는 코드를 작성하는 연습을 하는게 좋을지, 해당 문제를 최대한 빠르게 익히는 것을 더 우선해야할지 잘 모르겠다. 그래서 일단은 전자와 같이 코드를 작성하는 연습을 할 예정이다. 문제 푸는게 조금 익숙해진다면 그 다음 단계를 고민해봐도 괜찮겠지 싶은 마음이다.
다른 사람들이 작성한 답안
조건부(conditional) 연산자 ( = 삼항 연산자)
function solution(num1, num2) {
var answer = num1 === num2 ? 1 : -1;
return answer;
}
물음표(question mark) 연산자라고도 불리는 조건부 연산자를 사용하면, 조건에 따라 다른 값을 변수에 할당하는 코드를 더 짧고 간결하게 작성할 수 있다.
let result = condition ? value1 : value2;
조건부 연산자는 위와 같이 사용한다. 평가 대상인 condition이 truthy라면 value1이, 그렇지 않으면(falsy) value2가 반환된다.
문제와 같이 condition에 비교 연산자가 사용된다면, 물음표 연산자는 우선순위가 낮으므로 비교연산자가 먼저 실행되고 난 뒤 실행된다. (물음표 연산자는 우선순위 1부터 19까지 중 뒤에서 세번째다.)
[참고 자료]
https://school.programmers.co.kr/learn/courses/30/lessons/120807
https://ko.javascript.info/ifelse#ref-1270
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
'Front-End > Algorithm' 카테고리의 다른 글
[프로그래머스 / JavaScript] Lv.1 두 개 뽑아서 더하기 (0) | 2023.03.16 |
---|---|
[프로그래머스 / JavaScript] Lv.0 제곱수 판별하기 (0) | 2023.02.21 |
[프로그래머스 / JavaScript] Lv.1 문자열 내 마음대로 정렬하기 (0) | 2023.02.15 |
[프로그래머스 / JavaScript] Lv.1 최소직사각형 (0) | 2023.02.14 |
[프로그래머스 / JavaScript] Lv.0 몫 구하기 (0) | 2023.01.25 |