[프로그래머스 / JavaScript] Lv.0 몫 구하기
문제
정수 num1, num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해 주세요.
제한사항
- 0 < num1 ≤ 100
- 0 < num2 ≤ 100
입출력 예
num1 | num2 | result |
10 | 5 | 2 |
7 | 2 | 3 |
내가 작성한 답안
function solution(num1, num2) {
let answer = parseInt(num1 / num2);
return answer;
}
7 / 2 = 3.5의 경우처럼 몫이 정수가 아닌 값이 나올 수 있으므로 parseInt()를 이용해 실수를 정수형으로 변환하였다. parseInt()는 문자열 인자를 파싱하여 특정 진수의 정수를 반환한다.
다른 사람들이 작성한 답안
Math.floor
function solution(num1, num2) {
let answer = Math.floor(num1 / num2);
return answer;
}
Math.floor() 함수는 주어진 숫자와 같거나 작은 정수 중에서 가장 큰 수를 반환한다. (소수점 이하를 내린다.)
double tilde (~~)
function solution(num1, num2) {
let answer = ~~(num1 / num2);
return answer;
}
일반적인 tilde(~)는 주어진 숫자를 -(n+1)하게 되지만, double tilde(~~)는 양수일 경우 Math.floor()와 동일하게 소수점 이하를 내리고, 음수는 Math.ceil()과 동일하게 소수점 이하를 올린다.
double tilde가 크롬을 제외한 나머지 브라우저에서는 Math.floor보다 조금 더 빠른 성능을 보인다. 그러면 Math.floor가 아닌 double tilde를 사용하는 것이 더 권장되는가? 에 대한 물음이 생기는데, double tilde 성능 관련 글을 작성한 게시자들은 대부분 코드의 가독성을 위해서는 double tilde보다 Math.floor를 사용하는 것을 권장하고 있다.
다만, 내가 작성한 parseInt는 두 함수보다 성능이 훨씬 느리므로 Math.floor()를 쓰는 것이 좋다. 따라서 실수를 정수형으로 변환할 때는 Math.floor()를 사용하는 습관을 들여야겠다.
화살표함수
const solution = (num1, num2) => Math.floor(num1 / num2)
화살표 함수(arrow function)를 사용하면 일반 함수 표현식보다 단순하고 간결한 문법으로 함수를 만들 수 있다.
let sum = function(a, b) {
return a + b;
};
기존의 함수 작성법이 위와 같았다면,
let sum = (a, b) => a + b;
화살표함수는 위와 같이 훨씬 축약하여 코드를 작성할 수 있다. 따라서 화살표 함수는 본문이 한 줄인 함수를 작성할 때 유용하다. 화살표함수는 현재 진행 중인 자바스크립트 1회독을 끝내고 더 집중적으로 탐구해 봐야겠다.
[참고 자료]
https://school.programmers.co.kr/learn/courses/30/lessons/120805
https://www.mrlatte.net/code/2022/07/23/double-tilde-javascript
https://dev.to/asadm/the-mysterious-double-tilde-operation-mih
http://rocha.la/JavaScript-bitwise-operators-in-practice
https://ko.javascript.info/arrow-functions-basics