프로그래머스 JS: 두 수의 나눗셈

Young In Kim·2023년 1월 3일
0

프로그래머스

목록 보기
4/6

문제

코드

function solution(num1, num2) {
    let answer = (num1 / num2) * 1000;
    let result = Math.floor(answer);
    return result;
}

풀이

처음 풀이를 할 때 화살표 함수를 사용해 간결하게 코드를 작성하려 했지만

const solution = (num1, num2) => Math.floor(num1 / num2)*1000

으로 작성하자 Math.floor(num1 / num2)에서 이미 소수점을 지워버려 원하는 값이 나오지 않았다.
화살표 함수로 줄여 풀어보려 하니 구조가 완전히 이해되지 않아 화살표 함수를 분해해 풀어서 작성하였다.

더 나은 풀이

const solution = (num1, num2) => Math.floor(num1 / num2 * 1000)

기존 Math.floor(num1 / num2)*1000 에서 괄호를 밖으로 꺼내 1000까지 묶어주자 원하는 결과가 나왔다.
너무 복잡하게 생각했던 것 같다. 그리고 화살표 함수가 좀 더 익숙해지도록 연습해야겠다.

또 다른 풀이

const solution = (num1, num2) => Math.trunc(num1 / num2 * 1000)

다른 사람의 풀이를 보자 Math.trunc라는 내장함수를 사용했다.
Math.trunc와 Math.floor 모두 소수점이 사라지는데 다르게 사용한 이유가 궁금해 추가로 공부해 보았다.

Math.trunc() : 소수점 버리기
Math.floor() : 내림 ❓ 1.5 -> 1, -1.5 -> -2
Math.round() : 반올림 ❓ 1.5 -> 2, -1.5 -> -1
Math.ceil() : 올림 ❓ 1.5 -> 2, -1.5 -> -1

양수(자연수)에 사용할 때는 Math.trunc와 Math.floor 모두 상관 없이 소수점을 없앨 수 있지만
음수에서 사용할 때는 Math.trunc의 경우 소수점을 없애주고 Math.floor의 경우 음수의 내림을 하므로 trunc와 floor의 값이 달라진다.

Math.trunc(-7.5) 👉 -7
Math.floor(-7.5) 👉 -8

profile
문서화하는 신입 프론트엔드 개발자

0개의 댓글