Skip to content

Commit 1d6ee79

Browse files
authored
Merge pull request #1467 from clara-shin/main
[clara-shin] WEEK07 Solutions
2 parents f2040c7 + 8ec2f64 commit 1d6ee79

File tree

5 files changed

+282
-0
lines changed

5 files changed

+282
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* ์ค‘๋ณต ๋ฌธ์ž ์—†์ด ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ์ฐพ๊ธฐ (๋ถ€๋ถ„ ๋ฌธ์ž์—ด์€ ์—ฐ์†๋œ ๋ฌธ์ž๋“ค์˜ ์ง‘ํ•ฉ์ด์–ด์•ผ ํ•จ)
3+
*
4+
* ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ(Sliding Window) ๊ธฐ๋ฒ•
5+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ•:
6+
* 1. ์‹œ์ž‘ํฌ์ธํ„ฐ(left)์™€ ๋ํฌ์ธํ„ฐ(right)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œˆ๋„์šฐ ์ •์˜
7+
* 2. ๋ฌธ์ž์˜ ๋“ฑ์žฅ์—ฌ๋ถ€๋Š” Map์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”์ 
8+
* 3. ๋ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™์‹œํ‚ค๋ฉด์„œ ์œˆ๋„์šฐ ํ™•์žฅ
9+
* 4. ์ค‘๋ณต ๋ฌธ์ž๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ์‹œ์ž‘ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™์‹œ์ผœ ์œˆ๋„์šฐ ์ถ•์†Œ
10+
* 5. ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์—…๋ฐ์ดํŠธ
11+
*
12+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n), ๊ณต๊ฐ„๋ณต์žก๋„: O(min(n, m)) (n: ๋ฌธ์ž์—ด ๊ธธ์ด, m: ๋ฌธ์ž ์ง‘ํ•ฉ ํฌ๊ธฐ)
13+
*/
14+
/**
15+
* @param {string} s
16+
* @return {number}
17+
*/
18+
var lengthOfLongestSubstring = function (s) {
19+
if (!s.length) return 0;
20+
21+
let maxLength = 0;
22+
let left = 0; // ์‹œ์ž‘ ํฌ์ธํ„ฐ(์œˆ๋„์šฐ ์™ผ์ชฝ ๊ฒฝ๊ณ„)
23+
const charMap = new Map();
24+
25+
for (let right = 0; right < s.length; right++) {
26+
const currentChar = s[right]; // ํ˜„์žฌ ๋ฌธ์ž
27+
28+
// ํ˜„์žฌ๋ฌธ์ž๊ฐ€ ์ด๋ฏธ Map์— ์žˆ๊ณ , ๊ทธ ์ธ๋ฑ์Šค(์œ„์น˜)๊ฐ€ ํ˜„์žฌ ์œˆ๋„์šฐ ๋‚ด์— ์žˆ๋‹ค๋ฉด
29+
if (charMap.has(currentChar) && charMap.get(currentChar) >= left) {
30+
// ์‹œ์ž‘ํฌ์ธํ„ฐ(์œˆ๋„์šฐ ์™ผ์ชฝ ๊ฒฝ๊ณ„)๋ฅผ ์ค‘๋ณต๋œ ๋ฌธ์ž์˜ ๋‹ค์Œ์œ„์น˜๋กœ ์ด๋™
31+
left = charMap.get(currentChar) + 1;
32+
}
33+
34+
// ํ˜„์žฌ ๋ฌธ์ž์˜ ์ธ๋ฑ์Šค๋ฅผ Map์— ์ €์žฅ
35+
charMap.set(currentChar, right);
36+
37+
// ํ˜„์žฌ ์œˆ๋„์šฐ์˜ ๊ธธ์ด์™€ ๊ธฐ์กด ์ตœ๋Œ€ ๊ธธ์ด ์ค‘ ํฐ ๊ฐ’์„ ์„ ํƒ
38+
// right - left + 1: ํ˜„์žฌ ์œˆ๋„์šฐ์˜ ๊ธธ์ด
39+
maxLength = Math.max(maxLength, right - left + 1);
40+
}
41+
return maxLength; // ์ตœ๋Œ€ ๊ธธ์ด ๋ฆฌํ„ด
42+
};

โ€Žnumber-of-islands/clara-shin.js

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/**
2+
* ์„ฌ์˜ ๊ฐœ์ˆ˜ ์ฐพ๊ธฐ - ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฌธ์ œ
3+
* 2์ฐจ์› ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ทธ๋ฆฌ๋“œ, 1์€ ์„ฌ, 0์€ ๋ฌผ
4+
* ๊ทธ๋ฆฌ๋“œ์˜ ๋ชจ๋“  ๊ฐ€์žฅ์ž๋ฆฌ๋Š” ๋ฌผ๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ์Œ
5+
*
6+
* ๋ฌธ์ œ ์ ‘๊ทผ: BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰) ์‚ฌ์šฉ
7+
* 1. ๊ทธ๋ฆฌ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋•…(1)์„ ๋ฐœ๊ฒฌํ•˜๋ฉด BFS๋กœ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋•…์„ ํƒ์ƒ‰
8+
* 2. BFS ํƒ์ƒ‰ ์ค‘์— ๋ฐฉ๋ฌธํ•œ ๋•…์€ ๋ฐฉ๋ฌธ ๋ฐฐ์—ด์— ํ‘œ์‹œ
9+
* 3. BFS ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด ์„ฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฆ๊ฐ€
10+
* 4. ๊ทธ๋ฆฌ๋“œ ์ „์ฒด๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์„ฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ธฐ
11+
*
12+
* BFS ์„ ํƒ ์ด์œ : ์ œ์•ฝ ์กฐ๊ฑด(๊ทธ๋ฆฌ๋“œ ํฌ๊ธฐ ์ตœ๋Œ€ 300x300)์„ ๊ณ ๋ คํ–ˆ์„ ๋•Œ,
13+
* - ๊ทธ๋ฆฌ๋“œ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก DFS๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ๋กœ ์ธํ•œ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์œ„ํ—˜์ด ์žˆ์Œ,
14+
* - BFS๋Š” ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์œ„ํ—˜์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Œ
15+
* - ๋ฐฉ๋ฌธ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ์›๋ณธ๋ฐ์ดํ„ฐ ๋ณด์กด(๋ถˆ๋ณ€์„ฑ ์œ ์ง€)
16+
* - ๋‹จ, BFS๋Š” ํ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋” ๋งŽ์„ ์ˆ˜ ์žˆ์Œ
17+
*
18+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(Mร—N) (M: ํ–‰์˜ ๊ฐœ์ˆ˜, N: ์—ด์˜ ๊ฐœ์ˆ˜)
19+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(Mร—N) (๋ฐฉ๋ฌธ ๋ฐฐ์—ด๊ณผ ํ๋ฅผ ์‚ฌ์šฉ)
20+
*/
21+
/**
22+
* @param {character[][]} grid
23+
* @return {number}
24+
*/
25+
var numIslands = function (grid) {
26+
if (!grid || grid.length === 0) {
27+
return 0;
28+
}
29+
30+
const rows = grid.length;
31+
const cols = grid[0].length;
32+
let islandCount = 0;
33+
34+
// ๋ฐฉ๋ฌธ ๋ฐฐ์—ด ์ƒ์„ฑ
35+
const visited = Array(rows)
36+
.fill()
37+
.map(() => Array(cols).fill(false));
38+
39+
// ๋ฐฉํ–ฅ ๋ฐฐ์—ด (์ƒ, ํ•˜, ์ขŒ, ์šฐ)
40+
const directions = [
41+
[-1, 0],
42+
[1, 0],
43+
[0, -1],
44+
[0, 1],
45+
];
46+
47+
function bfs(startRow, startCol) {
48+
const queue = [[startRow, startCol]];
49+
visited[startRow][startCol] = true; // ์‹œ์ž‘์  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
50+
51+
while (queue.length > 0) {
52+
const [row, col] = queue.shift();
53+
54+
// 4๋ฐฉํ–ฅ ํƒ์ƒ‰
55+
for (const [dr, dc] of directions) {
56+
const newRow = row + dr;
57+
const newCol = col + dc;
58+
59+
// ๋ฒ”์œ„ ์•ˆ์—์„œ, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋•…('1')์ด๋ฉด ํƒ์ƒ‰
60+
if (
61+
newRow >= 0 &&
62+
newRow < rows &&
63+
newCol >= 0 &&
64+
newCol < cols &&
65+
grid[newRow][newCol] === '1' &&
66+
!visited[newRow][newCol]
67+
) {
68+
queue.push([newRow, newCol]);
69+
visited[newRow][newCol] = true; // ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
70+
}
71+
}
72+
}
73+
}
74+
75+
// ๊ทธ๋ฆฌ๋“œ ์ „์ฒด ์ˆœํšŒ
76+
for (let i = 0; i < rows; i++) {
77+
for (let j = 0; j < cols; j++) {
78+
// ๋•…('1')์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด BFS ์‹œ์ž‘ ๋ฐ ์„ฌ ์นด์šดํŠธ ์ฆ๊ฐ€
79+
if (grid[i][j] === '1' && !visited[i][j]) {
80+
islandCount++;
81+
bfs(i, j);
82+
}
83+
}
84+
}
85+
86+
return islandCount;
87+
};

โ€Žreverse-linked-list/clara-shin.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* ๋‹จ์ผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Singly Linked List)์˜ ๋…ธ๋“œ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋Œ€๋กœ ๋’ค์ง‘์–ด์„œ ๋ฆฌํ„ดํ•˜๊ธฐ
3+
* follow-up: ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐ˜๋ณต์ (Iterative) ๋˜๋Š” ์žฌ๊ท€์ (Recursive)์œผ๋กœ ๋’ค์ง‘์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋‹ค ๊ฐ€๋Šฅ?
4+
*
5+
* ๋ฐ˜๋ณต๋ฌธ(Iterative) ๋ฐฉ์‹ (โœ… ์‹ค๋ฌด์—์„œ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•จ)
6+
* ํฌ์ธํ„ฐ ์„ธ ๊ฐœ(prev, curr, next)๋ฅผ ์‚ฌ์šฉ, ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉฐ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ์„ ๋ฐ”๊ฟˆ
7+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n), ๊ณต๊ฐ„๋ณต์žก๋„: O(1)
8+
*
9+
* ์žฌ๊ท€(Recursive) ๋ฐฉ์‹
10+
* ์žฌ๊ท€์ ์œผ๋กœ ๋๊นŒ์ง€ ๋“ค์–ด๊ฐ„ ๋’ค, ๊ฐ ๋…ธ๋“œ์˜ next๋ฅผ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ
11+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n), ๊ณต๊ฐ„๋ณต์žก๋„: O(n) (์žฌ๊ท€ ์ฝœ์Šคํƒ)
12+
*/
13+
14+
/**
15+
* Definition for singly-linked list.
16+
* function ListNode(val, next) {
17+
* this.val = (val===undefined ? 0 : val)
18+
* this.next = (next===undefined ? null : next)
19+
* }
20+
*/
21+
/**
22+
* @param {ListNode} head
23+
* @return {ListNode}
24+
*/
25+
// ๋ฐ˜๋ณต๋ฌธ(Iterative) ๋ฐฉ์‹
26+
var reverseList = function (head) {
27+
let prev = null;
28+
let curr = head;
29+
while (curr) {
30+
const next = curr.next; // ๋‹ค์Œ ๋…ธ๋“œ ์ €์žฅ
31+
curr.next = prev; // ํ˜„์žฌ ๋…ธ๋“œ์˜ next๋ฅผ prev๋กœ ๋ณ€๊ฒฝ
32+
prev = curr; // prev๋ฅผ ํ˜„์žฌ ๋…ธ๋“œ๋กœ ์ด๋™
33+
curr = next; // curr๋ฅผ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™
34+
}
35+
return prev;
36+
};
37+
38+
// ์žฌ๊ท€(Recursive) ๋ฐฉ์‹
39+
var reverseList = function (head) {
40+
if (!head || !head.next) return head; // ๋นˆ ๋ฆฌ์ŠคํŠธ ๋˜๋Š” ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์ธ ๊ฒฝ์šฐ, ๋น ๋ฅธ ๋ฆฌํ„ด
41+
42+
const reversed = reverseList(head.next); // ๋‚˜๋จธ์ง€ ๋ฆฌ์ŠคํŠธ ์—ญ์ˆœ
43+
head.next.next = head; // ๋‹ค์Œ ๋…ธ๋“œ์˜ next๋ฅผ ํ˜„์žฌ ๋…ธ๋“œ๋กœ
44+
head.next = null; // ํ˜„์žฌ ๋…ธ๋“œ์˜ next๋ฅผ null๋กœ
45+
return reversed;
46+
};

โ€Žset-matrix-zeroes/clara-shin.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/**
2+
* ํ–‰๋ ฌ์—์„œ 0์„ ์ฐพ์•„, ํ•ด๋‹น ์š”์†Œ์˜ ์ „์ฒด ํ–‰๊ณผ ์—ด์„ 0์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฌธ์ œ
3+
*
4+
* ํŒ”๋กœ์šฐ์—…: O(1) ๊ณต๊ฐ„ ๋ณต์žก๋„๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ
5+
* - ์›๋ž˜ ํ–‰๋ ฌ์˜ ์ฒซ๋ฒˆ์งธ ํ–‰๊ณผ ์—ด์„ ์‚ฌ์šฉ, 0์ด ์žˆ๋Š” ํ–‰๊ณผ ์—ด์„ ํ‘œ์‹œ(์ถ”๊ฐ€ ๊ณต๊ฐ„์‚ฌ์šฉ ์—†์ด)
6+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ•:
7+
* 1. ์ฒซ๋ฒˆ์งธ ํ–‰๊ณผ ์—ด์— 0์ด ์žˆ๋Š”์ง€ ํ™•์ธ, ์žˆ๋‹ค๋ฉด ๋ณ„๋„์˜ ๋ณ€์ˆ˜์— ์ €์žฅ
8+
* 2. ์ฒซ๋ฒˆ์งธ ํ–‰๊ณผ ์—ด์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ–‰๋ ฌ์„ ์ˆœํšŒ โžก๏ธ 0์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ํ•ด๋‹น ์œ„์น˜์˜ ํ–‰๊ณผ ์—ด์„ 0์œผ๋กœ ์„ค์ •
9+
* 3. ์„ค์ •๋œ ๋งˆ์ปค ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚ด๋ถ€ ํ–‰๋ ฌ์˜ ์š”์†Œ๋ฅผ 0์œผ๋กœ ์—…๋ฐ์ดํŠธ
10+
*
11+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(m*n) โžก๏ธ ํ–‰๋ ฌ์„ ๋‘๋ฒˆ ์ˆœํšŒ
12+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(1) โžก๏ธ ์ถ”๊ฐ€ ๋ฐฐ์—ด ์‚ฌ์šฉ ์•ˆํ•จ
13+
*/
14+
/**
15+
* @param {number[][]} matrix
16+
* @return {void} Do not return anything, modify matrix in-place instead.
17+
*/
18+
var setZeroes = function (matrix) {
19+
if (!matrix || matrix.length === 0 || matrix[0].length === 0) return;
20+
21+
const m = matrix.length;
22+
const n = matrix[0].length;
23+
24+
// ํ•œ๋ฒˆ์˜ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ฒซ๋ฒˆ์งธ ํ–‰๊ณผ ์—ด์„ ์ฒดํฌ
25+
let firstRowHasZero = false;
26+
let firstColHasZero = false;
27+
28+
// ์ฒซ๋ฒˆ์งธ ํ–‰ ์ฒดํฌ
29+
for (let j = 0; j < n; j++) {
30+
if (matrix[0][j] === 0) {
31+
firstRowHasZero = true;
32+
break;
33+
}
34+
}
35+
// ์ฒซ๋ฒˆ์งธ ์—ด ์ฒดํฌ
36+
for (let i = 0; i < m; i++) {
37+
if (matrix[i][0] === 0) {
38+
firstColHasZero = true;
39+
break;
40+
}
41+
}
42+
43+
// ์ฒซ๋ฒˆ์งธ ํ–‰๊ณผ ์—ด์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ–‰๋ ฌ์„ ์ˆœํšŒ, ๋งˆ์ปค ์„ค์ •
44+
for (let i = 1; i < m; i++) {
45+
for (let j = 1; j < n; j++) {
46+
if (matrix[i][j] === 0) {
47+
matrix[i][0] = 0; // ํ•ด๋‹น ํ–‰์˜ ์ฒซ๋ฒˆ์งธ ์—ด์„ 0์œผ๋กœ ๋งˆํ‚น
48+
matrix[0][j] = 0; // ํ•ด๋‹น ์—ด์˜ ์ฒซ๋ฒˆ์งธ ํ–‰์„ 0์œผ๋กœ ๋งˆํ‚น
49+
}
50+
}
51+
}
52+
// ๋งˆ์ปค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚ด๋ถ€ ํ–‰๋ ฌ์˜ ์š”์†Œ๋ฅผ 0์œผ๋กœ ์—…๋ฐ์ดํŠธ
53+
for (let i = 1; i < m; i++) {
54+
for (let j = 1; j < n; j++) {
55+
if (matrix[i][0] === 0 || matrix[0][j] === 0) {
56+
matrix[i][j] = 0;
57+
}
58+
}
59+
}
60+
// ์ฒซ๋ฒˆ์งธ ํ–‰๊ณผ ์—ด์„ ์—…๋ฐ์ดํŠธ
61+
if (firstRowHasZero) {
62+
for (let j = 0; j < n; j++) {
63+
matrix[0][j] = 0;
64+
}
65+
}
66+
if (firstColHasZero) {
67+
for (let i = 0; i < m; i++) {
68+
matrix[i][0] = 0;
69+
}
70+
}
71+
};

โ€Žunique-paths/clara-shin.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* DP๋กœ ํ’€ ์ˆ˜๋„ ์žˆ๊ณ , ์กฐํ•ฉ์œผ๋กœ ํ’€ ์ˆ˜๋„ ์žˆ์Œ
3+
*
4+
* ์กฐํ•ฉ: (m+n-2)C(n-1)
5+
* n๊ฐœ์˜ ์›์†Œ ์ค‘์—์„œ r๊ฐœ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ (์ˆœ์„œ๊ณ ๋ ค ์•ˆํ•จ)
6+
* nCr = n! / (r!(n-r)!)
7+
* ์žฅ์ : ๊ฒฉ์ž์˜ ๊ฐ ์œ„์น˜๊นŒ์ง€ ๊ฒฝ๋กœ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ์•Œ์ˆ˜ ์žˆ์–ด์„œ ์œ ์—ฐํ•จ, DP๋ณด๋‹ค ์‹œ๊ฐ„๋ณต์žก๋„ ๋‚ฎ์Œ
8+
* ๋‹จ์ : ํฐ ์ˆ˜์˜ ํŒฉํ† ๋ฆฌ์–ผ์„ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
9+
*
10+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(min(m,n)) โžก๏ธ min(m-1, n-1)๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฃจํ”„ ๋•Œ๋ฌธ์—
11+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(1) โžก๏ธ ์ถ”๊ฐ€ ๋ฐฐ์—ด ์‚ฌ์šฉ ์•ˆํ•จ, ๋‹จ์ผ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ
12+
*/
13+
/**
14+
* @param {number} m
15+
* @param {number} n
16+
* @return {number}
17+
*/
18+
var uniquePaths = function (m, n) {
19+
// ์ด ์ด๋™ ํšŸ์ˆ˜: ์˜ค๋ฅธ์ชฝ (n-1)๋ฒˆ + ์•„๋ž˜์ชฝ (m-1)๋ฒˆ = m+n-2
20+
let N = m + n - 2;
21+
22+
// ์•„๋ž˜์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋Š” ํšŸ์ˆ˜ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋Š” ํšŸ์ˆ˜ ์ค‘ ๋” ์ž‘์€ ๊ฐ’ ์„ ํƒ
23+
// ์กฐํ•ฉ ๊ณต์‹์—์„œ nCk = nCn-k ํŠน์„ฑ์„ ์ด์šฉํ•ด ๊ณ„์‚ฐ์„ ์ตœ์ ํ™”
24+
let k = Math.min(m - 1, n - 1);
25+
26+
// ๊ฒฐ๊ณผ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”
27+
let result = 1;
28+
29+
// ์กฐํ•ฉ ๊ณ„์‚ฐ: nCk = (n * (n-1) * ... * (n-k+1)) / (k * (k-1) * ... * 1) ๋ฐฉ์‹์œผ๋กœ ๊ณ„์‚ฐ
30+
for (let i = 1; i <= k; i++) {
31+
result *= N - (i - 1); // ๋ถ„์ž ๋ถ€๋ถ„: n, n-1, n-2, ..., n-k+1
32+
result /= i; // ๋ถ„๋ชจ ๋ถ€๋ถ„: k, k-1, k-2, ..., 1
33+
}
34+
35+
return result;
36+
};

0 commit comments

Comments
ย (0)