File tree Expand file tree Collapse file tree
find-minimum-in-rotated-sorted-array
maximum-depth-of-binary-tree Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ } ;
Original file line number Diff line number Diff line change 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+ } ;
Original file line number Diff line number Diff line change 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+ } ;
Original file line number Diff line number Diff line change 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+ } ;
You can’t perform that action at this time.
0 commit comments