https://school.programmers.co.kr/learn/courses/30/lessons/120805?language=javascript
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코딩테스트 몫구하기 문제에서 C++에서는 int 자료형을 사용하고 num1 / num2 를 계산하게 되면 몫만을 리턴해준다.
int answer = num1 / num2;
JS에서도 똑같을 거라고 생각하고 코드를 작성했더니
테스트 2 에서 3.5의 값이나와 실패하게 되었다. 몫만을 리턴하는게 아닌 나머지까지 계산이 된 값을 리턴해 주었다.
당연하다고 생각했던값이 다르게 나와서 당황했고 찾아보게 되었다.
처음 의심한것은 js의 var이라는 자료형이 정확히 무엇인지 찾아봐야겠다는 생각을 하게되었다.
var 자료형은 C++에서 하나부터 열까지 자료형을 직접 제대로 입력하던것과 다르게 변화하는 자료형이라고 한다.
어떤 값이든 상황에 맞춰 변화해주는 편리한 자료형인것으로 알수 있게 되었다.
(더 자세히는 나중에 따로 써보겠다)
그래서 Js에서는 몫과 나머지를 따로 구하기위해서는 어떻게 해야하는지 찾아보았다.
3가지 방법을 찾을 수 있었다.
1. parseInt
parseInt 함수는 첫 번째 인자를 문자열로 변환하고, 그 값을 파싱하여 정수나 NaN을 반환합니다.
function solution(num1, num2)
{
const answer = parseInt(num1 / num2);
return answer;
}
2. Math.floor(x)
x와 같거나 작은 정수 중 가장 큰 수. -Math.ceil(-x)와 같은 값입니다.
function solution(num1, num2)
{
const answer = Math.floor(num1 / num2);
return answer;
}
3. ~~ (double tilde)
- Math.floor와 같은 기능을 한다.
- ~는 비트 연산의 not이고, 숫자에 ~ 연산을 하면 소수점이 버려진다.
- ~~는 ~를 두 번 실행한 것으로, 숫자에 활용하면 원래 숫자에서 정수부분만 취할 수 있다.
function solution(num1, num2)
{
const answer = ~~(num1 / num2);
return answer;
}
참고) 수행 속도는 ~~가 가장 빠르다고 한다.
~~ > Math.floor() > parseInt