320x100
https://school.programmers.co.kr/learn/courses/30/lessons/120840
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
구슬을 나누는 경우의 수
문제 설명
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
저의 풀이
/**
* 공식
* 전체 n개 중에서 a개를 순서없이 뽑는 경우의 수
* n * (n-1) * (n -2) 를 a개 만큼 진행한 값(분자) 나누기
* a * (a - 1) * (a - 2) 를 a가 1이 될때까지 진행한 값(분모)
*
* numerator(분자)의 초기 값을 balls(곱하기 때문에 초기값이 0이면 0만 나온다)
* denominator(분모)의 초기 값을 share (곱하기 때문에 초기값이 0이면 0만 나온다)
* for 반복문에 i를 1부터 share보다 작은 범위로 설정합니다.
* 0이 아니라 1인 이유는 분자 분모의 값에 이미 초기 값이 들어가있기 때문입니다.
* 위의 공식처럼 진행 합니다.
*
* numerator / denominator를 리턴합니다.
*/
function solution(balls, share) {
let numerator = balls;
let denominator = share;
for (let i = 1; i < share; i++) {
numerator *= balls - i;
denominator *= share - i;
}
return numerator / denominator;
}
다른 분들의 풀이
const helpFunc = (num) => (num === 0 ? 1 : num * helpFunc(num - 1));
function solution(balls, share) {
return Math.round(
helpFunc(balls) / helpFunc(balls - share) / helpFunc(share)
);
}
helpFunc 들어온 파라미터(num 넘이라 칭함)이 0이면 1을 리턴하고 끝내지만 0이 아니라면 넘 * 넘 -1을 수행합니다
수행 하다가 넘이 0이면 1을 리턴하고 끝납니다.
320x100
'자바 스크립트 공부' 카테고리의 다른 글
| 자바스크립트 sort() 활용 방법 (0) | 2022.12.19 |
|---|---|
| 자바스크립트 arr[n % arr.length] 배열을 순환하는 방법 (0) | 2022.12.15 |
| 자바스크립트 배열의 순서를 바꾸지 않고 새로운 값을 추가하는 방법 (0) | 2022.11.03 |
| function((prev) => !prev) 이전 값과 반대되는 값을 리턴 (0) | 2022.11.01 |
| 자바스크립트 배열에 값의 순서를 랜덤하게 바꾸고 싶을때 피셔-예이츠 알고리즘 (0) | 2022.08.16 |