Skip to content

Commit 52fb2a1

Browse files
authored
Merge pull request #1355 from Moonjonghoo/main
[moonjonghoo] Week 04 solutinos
2 parents aa6294a + e766c8c commit 52fb2a1

File tree

4 files changed

+156
-0
lines changed

4 files changed

+156
-0
lines changed

โ€Žcoin-change/moonjonghoo.js

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

โ€Žword-search/moonjonghoo.js

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/**
2+
* ๐Ÿ”ข ๋ฌธ์ œ ์ด๋ฆ„: Word Search (LeetCode 79)
3+
* ๐Ÿงฉ ๋ฌธ์ œ ์œ ํ˜•: DFS + Backtracking
4+
*
5+
* ๐ŸŽฏ ๋ฌธ์ œ ์„ค๋ช…:
6+
* ์ฃผ์–ด์ง„ 2์ฐจ์› ๋ฌธ์ž ๊ฒฉ์ž(board)์™€ ๋ฌธ์ž์—ด(word)์—์„œ,
7+
* ๋‹จ์–ด๊ฐ€ board ์•ˆ์—์„œ ์ธ์ ‘ํ•œ ์…€(์ƒํ•˜์ขŒ์šฐ)์„ ํ†ตํ•ด ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋ผ.
8+
* ๊ฐ ์…€์€ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋Œ€๊ฐ์„  ์ด๋™์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
9+
*
10+
* ๐Ÿ’ก ํ•ต์‹ฌ ์•„์ด๋””์–ด:
11+
* - ๋ชจ๋“  ์…€์„ ์‹œ์ž‘์ ์œผ๋กœ ์‚ผ์•„ DFS ํƒ์ƒ‰
12+
* - ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ๋‹ค์Œ ๋ฌธ์ž๋กœ ์žฌ๊ท€ ํ˜ธ์ถœ
13+
* - visited ๋ฐฐ์—ด์„ ํ†ตํ•ด ์ค‘๋ณต ๋ฐฉ๋ฌธ์„ ๋ฐฉ์ง€
14+
* - DFS ์ค‘ ์™„์„ฑ๋œ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ฉด true ๋ฐ˜ํ™˜
15+
*
16+
* ๐Ÿ“ˆ ์‹œ๊ฐ„๋ณต์žก๋„: O(N * 3^L)
17+
* - N = ์ „์ฒด ์…€ ์ˆ˜, L = ๋‹จ์–ด ๊ธธ์ด
18+
* - ๊ฐ ์…€๋งˆ๋‹ค ์ตœ๋Œ€ 3 ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ (์ด์ „ ์…€ ์ œ์™ธ)
19+
*
20+
* ๐Ÿ“ฆ ๊ณต๊ฐ„๋ณต์žก๋„: O(L) โ€” DFS ์žฌ๊ท€ ๊นŠ์ด (๋‹จ์–ด ๊ธธ์ด)
21+
*/
22+
23+
function exist(board, word) {
24+
const rows = board.length;
25+
const cols = board[0].length;
26+
27+
// 1. visited ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
28+
const visited = Array.from({ length: rows }, () => Array(cols).fill(false));
29+
30+
// 2. DFS ํ•จ์ˆ˜ ์ •์˜
31+
function dfs(x, y, idx) {
32+
// ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ฐพ์•˜์œผ๋ฉด ์„ฑ๊ณต
33+
if (idx === word.length) return true;
34+
35+
// ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜, ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๊ฑฐ๋‚˜, ๋ฌธ์ž ๋ถˆ์ผ์น˜ โ†’ ์‹คํŒจ
36+
if (
37+
x < 0 ||
38+
x >= rows ||
39+
y < 0 ||
40+
y >= cols ||
41+
visited[x][y] ||
42+
board[x][y] !== word[idx]
43+
)
44+
return false;
45+
46+
// ํ˜„์žฌ ์œ„์น˜ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
47+
visited[x][y] = true;
48+
49+
// ์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ ์ •์˜
50+
const directions = [
51+
[1, 0],
52+
[-1, 0],
53+
[0, 1],
54+
[0, -1],
55+
];
56+
57+
// 3. ๋‹ค์Œ ๋ฌธ์ž ํƒ์ƒ‰
58+
for (let [dx, dy] of directions) {
59+
if (dfs(x + dx, y + dy, idx + 1)) return true;
60+
}
61+
62+
// 4. ๋ฐฑํŠธ๋ž˜ํ‚น (๋ฐฉ๋ฌธ ์ƒํƒœ ๋ณต์›)
63+
visited[x][y] = false;
64+
return false;
65+
}
66+
67+
// 5. ๋ชจ๋“  ์…€์—์„œ DFS ์‹œ์ž‘ ์‹œ๋„
68+
for (let i = 0; i < rows; i++) {
69+
for (let j = 0; j < cols; j++) {
70+
if (board[i][j] === word[0] && dfs(i, j, 0)) {
71+
return true;
72+
}
73+
}
74+
}
75+
76+
return false;
77+
}

0 commit comments

Comments
ย (0)