Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 리버스 프록시
- aws
- TLS
- certbot
- 검색엔진최적화
- 자동화
- 배포
- DNS
- 렌더링 과정
- 로드 밸런싱
- 3-Way HandShake
- SSL
- nginx
- 무중단
- 이미지 포맷 변경
- pm2
- 이미지 압축
- webp
- ec2
- 성능 개선
- nextJS
- gitgub actions
- SSH
- tcp
- https
- 인증서
- workflow
- 이미지 최적화
- 브라우저
- CI
Archives
- Today
- Total
개발일기
[JavaScript] 구슬을 나누는 경우의 수 본문
문제 설명
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
제한사항
- 1 ≤ balls ≤ 30
- 1 ≤ share ≤ 30
- 구슬을 고르는 순서는 고려하지 않습니다.
- share ≤ balls
힌트
서로 다른 n개 중 m개를 뽑는 경우의 수 공식은 다음과 같습니다.
입출력 예
balls | share | result |
3 | 2 | 3 |
5 | 3 | 10 |
풀이
function solution(balls, share) {
let answer = factorial(balls) / (factorial(balls-share) * factorial(share))
function factorial (num) {
let factorial = BigInt(1)
for(let i = 2; i <= num; i++){
factorial *= BigInt(i)
}
return factorial
}
return answer
}
풀이 설명
이번 문제 풀이는 실패 했다. 입출력 예의 테스트 코드는 성공 했지만, 제출시 실행되는 테스트 코드는 대부분 실패해서 다른 사람의 풀이를 참고 했다. 풀어 보자.
1. 힌트를 보면 모든 수가 팩토리얼을 구한 뒤 계산 된다. 그렇기 떄문에 팩토리얼을 계산하는 함수를 만들어 사용한다.
2. factorial 함수는 이렇다. for문으로 반복하는데 i는 2부터 매개변수로 들어오는 num까지 반복한다. 반복하는 값은 factorial이라는 변수에 곱하기 할당 된 후 리턴 한다.
3. 계산된 팩토리얼 값들은 힌트처럼 계산 후 리턴한다.
BigInt란?
BigInt는 자바스크립트에서 정수의 한계를 넘어서는 큰 정수를 다루기 위해 도입된 새로운 데이터 타입이다. Number타입은 64비트 부동 소수점 숫자를 사용하여 정수를 표현하므로, 안전하게 표현할 수 있는 정수의 범위는 약 -2^53에서 2^53-1까지이다. 이 범위를 벗어나는 큰 정수를 정확하게 표현하고 계산하기 위해 BigInt 가 사용된다. factorial 함수 안의 factorial 변수에 할당된 1의 값에 BigInt를 사용한 이유는 타입을 맞춰주기 위함 이다.
'Algorithm' 카테고리의 다른 글
[JavaScript] 직사각형 넓이 구하기 (4) | 2024.07.24 |
---|---|
[JavaScript]삼각형의 완성조건 (2) (0) | 2024.07.19 |
[JavaScript] 영어가 싫어요 (0) | 2024.07.18 |
[JavaScript] 문자열 계산하기 (0) | 2024.07.16 |
[JavaScript] 컨트롤 제트 (5) | 2024.07.15 |