Skip to content

Commit 21482c2

Browse files
authored
Merge pull request #1368 from krokerdile/main
[krokerdile] WEEK 4 Solutions
2 parents ec29075 + 448f741 commit 21482c2

File tree

5 files changed

+162
-0
lines changed

5 files changed

+162
-0
lines changed

โ€Žcoin-change/krokerdile.js

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* @param {number[]} coins
3+
* @param {number} amount
4+
* @return {number}
5+
*/
6+
var coinChange = function(coins, amount) {
7+
const dp = new Array(amount + 1).fill(Infinity);
8+
dp[0] = 0; // 0์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋™์ „ ์ˆ˜๋Š” 0๊ฐœ
9+
10+
// bottom-up DP
11+
for (let i = 1; i <= amount; i++) {
12+
for (const coin of coins) {
13+
if (i - coin >= 0) {
14+
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
15+
}
16+
}
17+
}
18+
19+
return dp[amount] === Infinity ? -1 : dp[amount];
20+
};
21+
22+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(amount * coins.length)
23+
// -> ๊ฐ ๊ธˆ์•ก i๋งˆ๋‹ค ๋ชจ๋“  coin์„ ์‹œ๋„ํ•˜๊ธฐ ๋•Œ๋ฌธ
24+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(amount)
25+
// -> dp ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var findMin = function(nums) {
6+
let left = 0;
7+
let right = nums.length - 1;
8+
9+
while (left < right) {
10+
const mid = Math.floor((left + right) / 2);
11+
12+
// ์ค‘๊ฐ„๊ฐ’์ด ์˜ค๋ฅธ์ชฝ๋ณด๋‹ค ํฌ๋ฉด ์ตœ์†Œ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋‹ค!
13+
if (nums[mid] > nums[right]) {
14+
left = mid + 1;
15+
} else {
16+
// ์ตœ์†Œ๊ฐ’์€ mid๋ฅผ ํฌํ•จํ•œ ์™ผ์ชฝ์— ์žˆ๋‹ค!
17+
right = mid;
18+
}
19+
}
20+
21+
// left == right์ผ ๋•Œ ์ตœ์†Œ๊ฐ’์ด ์œ„์น˜ํ•จ
22+
return nums[left];
23+
};
24+
25+
// ์‹œ๊ฐ„ ๋ณต์žก๋„: O(log n), ์ด์ง„ ํƒ์ƒ‰์œผ๋กœ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์”ฉ ์ค„์—ฌ๋‚˜๊ฐ
26+
// ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1), ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val, left, right) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.left = (left===undefined ? null : left)
6+
* this.right = (right===undefined ? null : right)
7+
* }
8+
*/
9+
/**
10+
* @param {TreeNode} root
11+
* @return {number}
12+
*/
13+
var maxDepth = function(root) {
14+
if (root === null) return 0;
15+
16+
let queue = [root];
17+
let depth = 0;
18+
19+
while (queue.length > 0) {
20+
let levelSize = queue.length;
21+
for (let i = 0; i < levelSize; i++) {
22+
const node = queue.shift();
23+
if (node.left) queue.push(node.left);
24+
if (node.right) queue.push(node.right);
25+
}
26+
depth++;
27+
}
28+
29+
return depth;
30+
};
+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* function ListNode(val, next) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.next = (next===undefined ? null : next)
6+
* }
7+
*/
8+
/**
9+
* @param {ListNode} list1
10+
* @param {ListNode} list2
11+
* @return {ListNode}
12+
*/
13+
var mergeTwoLists = function(list1, list2) {
14+
// ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘์ ์„ ์œ„ํ•œ ๋”๋ฏธ ๋…ธ๋“œ
15+
let dummy = new ListNode(-1);
16+
let current = dummy;
17+
18+
// ๋‘˜ ๋‹ค null์ด ์•„๋‹ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
19+
while (list1 !== null && list2 !== null) {
20+
if (list1.val <= list2.val) {
21+
current.next = list1;
22+
list1 = list1.next;
23+
} else {
24+
current.next = list2;
25+
list2 = list2.next;
26+
}
27+
current = current.next;
28+
}
29+
30+
// ๋‚จ์€ ๋…ธ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ๋Œ€๋กœ ๋ถ™์ž„
31+
current.next = list1 !== null ? list1 : list2;
32+
33+
return dummy.next; // dummy ๋‹ค์Œ์ด ์ง„์งœ head
34+
};

โ€Žword-search/krokerdile.js

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* @param {character[][]} board
3+
* @param {string} word
4+
* @return {boolean}
5+
*/
6+
var exist = function(board, word) {
7+
const rows = board.length;
8+
const cols = board[0].length;
9+
10+
// DFS ํ•จ์ˆ˜ ์ •์˜
11+
const dfs = (r, c, idx) => {
12+
// ๋‹จ์–ด ๋๊นŒ์ง€ ์ฐพ์€ ๊ฒฝ์šฐ
13+
if (idx === word.length) return true;
14+
15+
// ๋ฒ”์œ„ ๋ฐ–์ด๊ฑฐ๋‚˜, ๋ฌธ์ž ๋ถˆ์ผ์น˜๊ฑฐ๋‚˜, ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๊ฒฝ์šฐ
16+
if (
17+
r < 0 || c < 0 || r >= rows || c >= cols ||
18+
board[r][c] !== word[idx]
19+
) {
20+
return false;
21+
}
22+
23+
const temp = board[r][c]; // ํ˜„์žฌ ๋ฌธ์ž ์ €์žฅ
24+
board[r][c] = "#"; // ๋ฐฉ๋ฌธ ํ‘œ์‹œ
25+
26+
// ์ƒํ•˜์ขŒ์šฐ๋กœ ํƒ์ƒ‰
27+
const found = dfs(r + 1, c, idx + 1) ||
28+
dfs(r - 1, c, idx + 1) ||
29+
dfs(r, c + 1, idx + 1) ||
30+
dfs(r, c - 1, idx + 1);
31+
32+
board[r][c] = temp; // ๋ฐฑํŠธ๋ž˜ํ‚น: ์›์ƒ๋ณต๊ตฌ
33+
34+
return found;
35+
};
36+
37+
// ๋ณด๋“œ์˜ ๋ชจ๋“  ์นธ์—์„œ ์‹œ์ž‘ํ•ด๋ณด๊ธฐ
38+
for (let r = 0; r < rows; r++) {
39+
for (let c = 0; c < cols; c++) {
40+
if (dfs(r, c, 0)) return true;
41+
}
42+
}
43+
44+
return false;
45+
};
46+
47+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(m * n * 4^L), m*n๋ฒˆ DFS ์‹œ์ž‘ ๊ฐ€๋Šฅํ•˜๊ณ , ๊ฐ DFS๋Š” ์ตœ๋Œ€ 4๋ฐฉํ–ฅ * ๋‹จ์–ด ๊ธธ์ด ๋งŒํผ ํƒ์ƒ‰

0 commit comments

Comments
ย (0)