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 |
Tags
- electron-packager
- Recoil
- adb pair
- Can't resolve
- ELECTRON
- github pdf
- github lfs
- Each child in a list should have a unique "key" prop.
- 이미지 데이터 타입
- vercel git lfs
- rolldown
- github 100mb
- camera permission
- npm package
- adb connect
- animation
- Failed to compiled
- nextjs
- dvh
- react-native
- device in use
- Git
- react-native-dotenv
- silent printing
- custom printing
- 티스토리 성능
- camera access
- augmentedDevice
- ffi-napi
- html
Archives
- Today
- Total
Bleeding edge
조합 nCr 구하기. 본문
코딩테스트에서도 쓰는 경우가 종종 있기도하고.. 그 때마다 어버버 하는것도 싫어서, 직접 기록합니다.
조합 nCr 플로우
1. const storage = [1,1]를 만든다.
1)[1, 1]로 만든 이유는 0! 에서 대응이 가능하고, 인덱스와, 팩토리얼n의 n이 일치하기에 편하게 하기 위해
2)storage를 따로 선언한 이유는 nCr의 같은경우에, 팩토리얼이 무려 3개가 사용되기 때문에 재활용을 하기 위해서
2. storage n번째가 없다면, storage의 마지막 값에 마지막 값+1을 곱한 값을 곱한후 다시 팩토리얼 함수를 실행한다.
if (!storage[n]) {
storage.push(storage.length * storage[storage.length - 1]);
fact(n);
} else {
return storage[n];
}
그렇다면, n!이 생성될 때까지 팩토리얼 함수를 재귀함수시킨다. 지금 여기까지 쓴다면, 이전에 값이 저장된 팩토리얼이라면 문제없이 실행이된다.
3. 마지막으로 없는 값의 팩토리얼을 추출하기 위해서 return storage[storage.length-1]을 실행한다.
4. combination의 공식인 f(n)/f(r)/f(n-r)을 넣는다.
최종
const storage = [1, 1];
const fact = (n) => {
if (!storage[n]) {
storage.push(storage.length * storage[storage.length - 1]);
fact(n);
} else {
return storage[n];
}
return storage[storage.length - 1];
};
const combination = (n, r) => {
console.log(fact(4), fact(1));
return fact(n) / fact(r) / fact(n - r);
};
아이디어가 어렵거나 식이 어렵진 않다. 단지, 재귀함수를 사용하 였을때, 어느 것이 언제 어느 값을 주느냐가 헷갈릴수있다. 만일 잘못 식을 넣었다면 undefined를 마주하게 된다. ;ㅁ;!
'코딩테스트 공부' 카테고리의 다른 글
[프로그래머스] 여행경로 - 자바스크립트 (0) | 2022.05.18 |
---|---|
[프로그래머스] 구명보트 - 자바스크립트 (0) | 2022.05.13 |
[프로그래머스] [3차] n진수 게임 - 자바스크립트 (0) | 2022.05.10 |
[프로그래머스] 주차 요금 계산 - 자바스크립트 (0) | 2022.05.10 |
[프로그래머스] JadenCase 문자열 만들기 - 자바스크립트 (0) | 2022.05.10 |