문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
서로 다른 n개의 구슬을 고르는 방법입니다. (조합)
아이디어
1. 조합 공식을 구현한다.

구현(풀이)
function solution(balls, share) {
var answer = 0;
function factorial(n) {
var x = BigInt(0)
var y = BigInt(1)
while (x < n) {
x += BigInt(1)
y *= x
}
return y
}
answer = factorial(balls) / (factorial(share) * factorial(balls-share))
return answer;
}
별 거는 없었는데, 테스트케이스가 너무 커서 BigInt를 사용하지 않으면 오답으로 처리된다.
남의 풀이
const factorial = num =>
Array
.from({ length: num }, (_, i) => i + 1)
.reduce((a, c) => a *= c, 1)
// const 팩토리얼 = (num) => num === 0 ? 1 : num * 팩토리얼(num - 1)
const solution = (n, m) =>
Math.round(factorial(n) / (factorial(n - m) * factorial(m)))test
1. Array.from({length : num}, (_,i) => i +1 )은 `length: num` 부분은 길이에 맞는 n개의 undefined를 얇게 복사하여 새로운 Array를 만듭니다. 하지만 우리는 1부터 필요하므로 mapFn을 사용하여 i+1을 적용하여 [1,2, ... , n] 배열을 만들어줍니다.
2. 이후 리듀스 함수로 a값에 계속 곱해줘서 반환합니다.
주석처리된 함수처럼 팩토리얼 함수를 재귀함수로 짤 수도 있습니다. 좋은 풀이라 가져왔습니다.
참고문서
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/from
'TIL > 이전 풀이' 카테고리의 다른 글
| [js] Leetcode 11. Container With Most Water (0) | 2023.04.27 |
|---|---|
| [js] Leetcode 289. Game of Life (0) | 2023.04.26 |
| [js] Programmers_Lv.0_소인수분해 (0) | 2023.03.28 |
| [js] Programmers_Lv.0_인덱스 바꾸기 (0) | 2023.03.28 |
| [js] Programmers_Lv.0_자릿수 더하기 (1) | 2023.03.28 |