forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclara-shin.js
More file actions
36 lines (32 loc) ยท 1.33 KB
/
clara-shin.js
File metadata and controls
36 lines (32 loc) ยท 1.33 KB
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
31
32
33
34
35
36
/**
* DP๋ก ํ ์๋ ์๊ณ , ์กฐํฉ์ผ๋ก ํ ์๋ ์์
*
* ์กฐํฉ: (m+n-2)C(n-1)
* n๊ฐ์ ์์ ์ค์์ r๊ฐ๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ์ ์ (์์๊ณ ๋ ค ์ํจ)
* nCr = n! / (r!(n-r)!)
* ์ฅ์ : ๊ฒฉ์์ ๊ฐ ์์น๊น์ง ๊ฒฝ๋ก์ ์๋ฅผ ๋ชจ๋ ์์ ์์ด์ ์ ์ฐํจ, DP๋ณด๋ค ์๊ฐ๋ณต์ก๋ ๋ฎ์
* ๋จ์ : ํฐ ์์ ํฉํ ๋ฆฌ์ผ์ ๊ณ์ฐํด์ผ ํ๋ฏ๋ก ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ ์ ์์
*
* ์๊ฐ๋ณต์ก๋: O(min(m,n)) โก๏ธ min(m-1, n-1)๊น์ง ๋ฐ๋ณตํ๋ ๋ฃจํ ๋๋ฌธ์
* ๊ณต๊ฐ๋ณต์ก๋: O(1) โก๏ธ ์ถ๊ฐ ๋ฐฐ์ด ์ฌ์ฉ ์ํจ, ๋จ์ผ๋ณ์๋ง ์ฌ์ฉ
*/
/**
* @param {number} m
* @param {number} n
* @return {number}
*/
var uniquePaths = function (m, n) {
// ์ด ์ด๋ ํ์: ์ค๋ฅธ์ชฝ (n-1)๋ฒ + ์๋์ชฝ (m-1)๋ฒ = m+n-2
let N = m + n - 2;
// ์๋์ชฝ์ผ๋ก ์ด๋ํ๋ ํ์ ๋๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๋ ํ์ ์ค ๋ ์์ ๊ฐ ์ ํ
// ์กฐํฉ ๊ณต์์์ nCk = nCn-k ํน์ฑ์ ์ด์ฉํด ๊ณ์ฐ์ ์ต์ ํ
let k = Math.min(m - 1, n - 1);
// ๊ฒฐ๊ณผ ๋ณ์๋ฅผ ์ด๊ธฐํ
let result = 1;
// ์กฐํฉ ๊ณ์ฐ: nCk = (n * (n-1) * ... * (n-k+1)) / (k * (k-1) * ... * 1) ๋ฐฉ์์ผ๋ก ๊ณ์ฐ
for (let i = 1; i <= k; i++) {
result *= N - (i - 1); // ๋ถ์ ๋ถ๋ถ: n, n-1, n-2, ..., n-k+1
result /= i; // ๋ถ๋ชจ ๋ถ๋ถ: k, k-1, k-2, ..., 1
}
return result;
};