Skip to content

Commit f801651

Browse files
authored
Merge pull request #2471 from Cyjin-jani/main
[Cyjin-jani] WEEK 04 Solutions
2 parents af4a2c7 + c65e89f commit f801651

4 files changed

Lines changed: 145 additions & 0 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// math의 min을 이용하는 방법
2+
// tc: O(n)
3+
// sc: 잘 몰랐는데 모든 요소를 함수 인자로 풀어 콜스택에 올린다 하여 O(n)이 된다고 함..
4+
// (대용량의 배열 시 maximum exceed 에러가 날 수 있음)
5+
const findMin_use_math_min = function (nums) {
6+
return Math.min(...nums);
7+
};
8+
9+
// 메서드를 사용하지 않은 풀이.
10+
// tc: O(n)
11+
// sc: O(1)
12+
const findMin_naive = function (nums) {
13+
let min = nums[0];
14+
15+
for (let i = 1; i < nums.length; i++) {
16+
if (nums[i] <= min) {
17+
min = nums[i];
18+
break;
19+
}
20+
}
21+
22+
return min;
23+
};
24+
25+
// 시간복잡도를 문제의 요구사항에 맞도록 줄여본 풀이
26+
// tc: O(logn)
27+
// sc: O(1)
28+
const findMin = function (nums) {
29+
let left = 0,
30+
right = nums.length - 1;
31+
32+
while (left < right) {
33+
let mid = Math.floor((left + right) / 2);
34+
35+
if (nums[mid] > nums[right]) {
36+
left = mid + 1;
37+
} else {
38+
right = mid;
39+
}
40+
}
41+
42+
return nums[left];
43+
};
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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) return 0;
15+
let answer = 0;
16+
17+
function dfs(node, count) {
18+
answer = Math.max(answer, count);
19+
20+
if (!node.left && !node.right) return;
21+
22+
if (node.left) dfs(node.left, count + 1);
23+
if (node.right) dfs(node.right, count + 1);
24+
}
25+
dfs(root, 1);
26+
27+
return answer;
28+
};
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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+
//! 추후 복습 필요한 문제
14+
const mergeTwoLists = function (list1, list2) {
15+
// 이 부분을 제한 시간 내에 떠올리지 못해 ai로부터 힌트를 받아 로직을 작성
16+
let temp = new ListNode(0);
17+
let cur = temp;
18+
19+
while (list1 !== null && list2 !== null) {
20+
if (list1.val <= list2.val) {
21+
cur.next = list1;
22+
list1 = list1.next;
23+
} else {
24+
cur.next = list2;
25+
list2 = list2.next;
26+
}
27+
cur = cur.next;
28+
}
29+
30+
cur.next = list1 !== null ? list1 : list2;
31+
32+
return temp.next;
33+
};

word-search/Cyjin-jani.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
//! dfs 구현 중에 막혀서 ai의 도움을 받아 풀이를 완성했습니다..
2+
var exist = function (board, word) {
3+
const dx = [0, 0, -1, 1];
4+
const dy = [-1, 1, 0, 0];
5+
6+
for (let i = 0; i < board.length; i++) {
7+
for (let j = 0; j < board[i].length; j++) {
8+
if (board[i][j] === word[0]) {
9+
if (dfs(j, i, 0)) return true;
10+
}
11+
}
12+
}
13+
14+
function dfs(x, y, index) {
15+
// 성공
16+
if (index === word.length) return true;
17+
18+
// 실패
19+
if (x < 0 || y < 0 || y >= board.length || x >= board[y].length) return false;
20+
if (board[y][x] === '#') return false;
21+
if (board[y][x] !== word[index]) return false;
22+
23+
// 방문 표시
24+
const origin = board[y][x];
25+
board[y][x] = '#';
26+
27+
// 탐색
28+
for (let i = 0; i < 4; i++) {
29+
const newDy = y + dy[i];
30+
const newDx = x + dx[i];
31+
32+
if (dfs(newDx, newDy, index + 1)) return true;
33+
}
34+
// 복원
35+
board[y][x] = origin;
36+
37+
return false;
38+
}
39+
40+
return false;
41+
};

0 commit comments

Comments
 (0)