개발로그필름
[프로그래머스] 구슬을 나누는 경우의 수 javascript 본문
728x90
반응형
SMALL
https://school.programmers.co.kr/learn/courses/30/lessons/120840
문제
나의 문제 풀이
function solution(balls, share) {
return Math.round(factorial(balls) / (factorial((balls-share)) * factorial(share)))
}
function factorial(n) {
let result = 1;
for (let i = 1; i <= n; i++) {
result = result * i;
}
return result;
}
factorial 함수를 따로 만들어 수학 공식을 이용해 풀었다
Math.round()를 쓰지 않아 몇몇 결과가 통과되지 않아 애를 먹었는데
js의 소수점 오류를 원인으로 들 수 있다
콘솔창을 열어 0.1 + 0.2를 입력하면 우리가 흔히 생각하는 답인 0.3이 아닌 0.30000000000000004가 나오는 걸 확인 할 수 있다
이와 같은 오류가 생기는 이유는 우리는 계산할 때 10진법을 사용하지만 컴퓨터는 2진법을 사용하기 때문이라고 할 수 있다
따라서 10진법을 2진법으로 바꿀 때 컴퓨터 내부에서 소수 중 일부가 무한 소수가 되어 버리는 경우가 있다
하지만 컴퓨터 메모리는 무한 소수를 다 표현 할 수 없기 때문에 중간에 잘라 유한 소수가 돼서 끝에 04로 끝나게 돼서 우리 눈에 출력되어 보여진다
이와 같은 오류를 해결 할 수 있는 방법은
1. toFixed() 사용
입력받은 숫자를 매개변수만큼 자리수를 반올림해 String으로 반환
(매개변수는 소수점 몇 번째까지 나타낼지. 0부터 20까지 입력 가능)
var result = (0.1 + 0.2).toFixed(2);
// 소수점 두자리까지 나타낸다
// '0.30' ===> String 타입
// 숫자로 변환하고 싶다면 Number() 메서드 사용해주기!!
Number(result);
// 0.3 ===> Number 타입
2. Math.round() 사용
2023.01.31 - [IT/JavaScript] - [JS] Math.floor(), Math.ceil(), Math.round() 개념과 예제
예전에 썼던 글이 있는데 참고!!!
반응형
LIST
'coding test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 2차원으로 만들기 javascript (0) | 2023.04.25 |
---|---|
[프로그래머스] 점의 위치 구하기 javascript (0) | 2023.04.25 |
[프로그래머스] 가위 바위 보 javascript (0) | 2023.04.23 |
[프로그래머스] 모스부호(1) javascript (0) | 2023.04.23 |
[프로그래머스] 개미 군단 javascript (0) | 2023.04.23 |
Comments