Skip to content

Commit 8677195

Browse files
committed
solve: unique paths
1 parent 11cf061 commit 8677195

File tree

1 file changed

+127
-0
lines changed

1 file changed

+127
-0
lines changed

β€Žunique-paths/wogha95.jsβ€Ž

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
/**
2+
* 3μ°¨ (μ‹œκ°„, 곡간 λ³΅μž‘λ„ κ°œμ„ )
3+
* λ™μΌν•œ downλ°©ν–₯, rightλ°©ν–₯λ“€ μ€‘μ—μ„œ λ‚˜μ—΄ν•˜λŠ” 방법
4+
* 즉, ((m - 1) + (n - 1))! / ((m - 1)! * (n - 1)!)
5+
* (+ νŒ©ν† λ¦¬μ–Όμ˜ μˆ˜λŠ” 맀우 λΉ λ₯΄κ²Œ μ»€μ§€λ―€λ‘œ 쀑간 λ‚˜λˆ—μ…ˆμ΄ κ°€λŠ₯ν• λ•Œλ§ˆλ‹€ λ‚˜λˆ„μ–΄μ„œ integer λ²”μœ„λ₯Ό λ„˜μ§€ μ•Šλ„λ‘ λ°©μ§€)
6+
*
7+
* TC: O(M + N)
8+
* 1λΆ€ν„° μ΅œλŒ€ (M - 1) + (N + 1)κΉŒμ§€ 순회
9+
*
10+
* SC: O(1)
11+
* κ³„μ‚°μ˜ κ²°κ³Ό λ³€μˆ˜κ°€ m, nκ³Ό λ¬΄κ΄€ν•˜λ―€λ‘œ μƒμˆ˜μ˜ κ³΅κ°„λ³΅μž‘λ„
12+
*/
13+
14+
/**
15+
* @param {number} m
16+
* @param {number} n
17+
* @return {number}
18+
*/
19+
var uniquePaths = function (m, n) {
20+
// 1. downλ°©ν–₯, rightλ°©ν–₯의 수
21+
const NUMBER_OF_DOWN = m - 1;
22+
const NUMBER_OF_RIGHT = n - 1;
23+
24+
// 2. factorial 계산을 μœ„ν•œ λ³€μˆ˜
25+
let result = 1;
26+
let factorialOfDown = 1;
27+
let factorialOfRight = 1;
28+
29+
// 3. 'downλ°©ν–₯ 수 + rightλ°©ν–₯ 수'만큼 μˆœνšŒν•˜λ©΄μ„œ
30+
for (let number = 1; number <= NUMBER_OF_DOWN + NUMBER_OF_RIGHT; number++) {
31+
result *= number;
32+
33+
// 4. factorial 값듀이 컀지지 μ•Šλ„λ‘ λ‚˜λˆŒμˆ˜ μžˆμ„λ•Œλ§ˆλ‹€ λ‚˜λˆ” (factorial of down)
34+
if (number <= NUMBER_OF_DOWN) {
35+
factorialOfDown *= number;
36+
if (result % factorialOfDown === 0) {
37+
result /= factorialOfDown;
38+
factorialOfDown = 1;
39+
}
40+
}
41+
42+
// 5. factorial 값듀이 컀지지 μ•Šλ„λ‘ λ‚˜λˆŒμˆ˜ μžˆμ„λ•Œλ§ˆλ‹€ λ‚˜λˆ” (factorial of right)
43+
if (number <= NUMBER_OF_RIGHT) {
44+
factorialOfRight *= number;
45+
if (result % factorialOfRight === 0) {
46+
result /= factorialOfRight;
47+
factorialOfRight = 1;
48+
}
49+
}
50+
}
51+
52+
return result / factorialOfDown / factorialOfRight;
53+
};
54+
55+
/**
56+
* 2μ°¨ (κ³΅κ°„λ³΅μž‘λ„ κ°œμ„ )
57+
* 이전 ν’€μ΄μ—μ„œ λͺ¨λ“  ν–‰μ˜ 경둜수λ₯Ό κΈ°μ–΅ν•  ν•„μš”κ°€ μ—†λŠ” 점을 ν™œμš©
58+
*
59+
* TC: O(M * N)
60+
* 경둜 수λ₯Ό κΈ°λ‘ν•˜κΈ° μœ„ν•œ Nλ°°μ—΄ 순회 * (M - 1)
61+
*
62+
* SC: O(N)
63+
* 경둜수 기둝을 μœ„ν•œ 1차원 λ°°μ—΄
64+
*/
65+
66+
/**
67+
* @param {number} m
68+
* @param {number} n
69+
* @return {number}
70+
*/
71+
var uniquePaths = function (m, n) {
72+
// 1. μ΅œμƒλ‹¨μ˜ κ²½λ‘œμˆ˜λŠ” λͺ¨λ‘ 1
73+
const numberOfPaths = new Array(n).fill(1);
74+
75+
for (let row = 1; row < m; row++) {
76+
// 2. 각 μ’Œν‘œμ˜ κ²½λ‘œμˆ˜λŠ” ν˜„μ’Œν‘œ(1μ°¨ ν’€μ΄μ˜ row-1)와 μ’ŒμΈ‘μ’Œν‘œ(1μ°¨ ν’€μ΄μ˜ column-1)의 ν•©
77+
for (let column = 1; column < n; column++) {
78+
numberOfPaths[column] += numberOfPaths[column - 1];
79+
}
80+
}
81+
82+
return numberOfPaths[n - 1];
83+
};
84+
85+
/**
86+
* 1μ°¨
87+
* 각 μ’Œν‘œμ˜ 경둜수λ₯Ό κΈ°λ‘ν•˜μ—¬ dp둜 풀이
88+
* ν˜„μ’Œν‘œκΉŒμ§€μ˜ 경둜수 = μƒλ‹¨μ’Œν‘œμ—μ„œ 온 경우 + μ’ŒμΈ‘μ’Œν‘œμ—μ„œ 온 경우
89+
* dp[row][column] = dp[row - 1][column] + dp[row][column - 1]
90+
*
91+
*
92+
* TC: O(M * N)
93+
* 경둜수λ₯Ό κΈ°λ‘ν•œ 2차원 배열을 전체 순회
94+
*
95+
* SC: O(M * N)
96+
* 경둜수 기둝을 μœ„ν•œ 2차원 λ°°μ—΄
97+
*/
98+
99+
/**
100+
* @param {number} m
101+
* @param {number} n
102+
* @return {number}
103+
*/
104+
var uniquePaths = function (m, n) {
105+
// 1. 각 μ’Œλ£ŒκΉŒμ§€μ˜ 경둜수λ₯Ό κΈ°λ‘ν•˜κΈ° μœ„ν•œ λ°°μ—΄
106+
const numberOfPaths = new Array(m).fill(new Array(n).fill(0));
107+
108+
// 2. μ΅œμ’ŒμΈ‘μ— μžˆλŠ” μ’Œν‘œμ˜ κ²½λ‘œμˆ˜λŠ” 1
109+
for (let row = 0; row < m; row++) {
110+
numberOfPaths[row][0] = 1;
111+
}
112+
113+
// 3. μ΅œμƒλ‹¨μ— μžˆλŠ” μ’Œν‘œμ˜ κ²½λ‘œμˆ˜λŠ” 1
114+
for (let column = 0; column < n; column++) {
115+
numberOfPaths[0][column] = 1;
116+
}
117+
118+
// 4. κ·Έ μ™Έ 각 μ’Œν‘œλŠ” λ°”λ‘œ μœ„ μ’Œν‘œ(column-1)와 λ°”λ‘œ μ™Όμͺ½ μ’Œν‘œ(row-1)의 경둜수의 ν•©
119+
for (let row = 1; row < m; row++) {
120+
for (let column = 1; column < n; column++) {
121+
numberOfPaths[row][column] =
122+
numberOfPaths[row - 1][column] + numberOfPaths[row][column - 1];
123+
}
124+
}
125+
126+
return numberOfPaths[m - 1][n - 1];
127+
};

0 commit comments

Comments
Β (0)