File tree Expand file tree Collapse file tree 4 files changed +174
-0
lines changed
longest-palindromic-substring
validate-binary-search-tree Expand file tree Collapse file tree 4 files changed +174
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * ์ค์ฌ ํ์ฅ๋ฒ์ ์ด์ฉํ์ฌ ๊ฐ์ฅ ๊ธด ํฐ๋ฆฐ๋๋กฌ ์ฐพ๊ธฐ
3+ * ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋
4+ * - ์๊ฐ ๋ณต์ก๋: O(n2)
5+ * - ๊ณต๊ฐ ๋ณต์ก๋: O(1)
6+ * @param s
7+ */
8+ function longestPalindrome ( s : string ) : string {
9+ let maxLength = 0 ;
10+ let longestPal = '' ;
11+
12+ for ( let x = 0 ; x < s . length ; x ++ ) {
13+ // 1. ํ์ ๊ธธ์ด ํฐ๋ฆฐ๋๋กฌ - ํ ๋ฌธ์๋ฅผ ์ค์ฌ์ผ๋ก ํจ
14+ let left = x
15+ let right = x
16+
17+ while ( left >= 0 && right < s . length && s [ left ] === s [ right ] ) {
18+ // ํ์ฌ ๋ฐ๊ฒฌํ ํฐ๋ฆฐ๋๋กฌ์ด ์ด์ ์ ๋ฐ๊ฒฌํ ๊ฒ๋ณด๋ค ๊ธธ๋ฉด ๊ฐฑ์
19+ if ( right - left + 1 > maxLength ) {
20+ maxLength = right - left + 1 ;
21+ longestPal = s . substring ( left , right + 1 ) ;
22+ }
23+
24+ left --
25+ right ++
26+ }
27+
28+ // 2. ์ง์ ๊ธธ์ด ํฐ๋ฆฐ๋๋กฌ - ๋ ๋ฌธ์ ์ฌ์ด๋ฅผ ์ค์ฌ์ผ๋ก ํจ
29+ left = x
30+ right = x + 1
31+
32+ while ( left >= 0 && right < s . length && s [ left ] === s [ right ] ) {
33+ // ํ์ฌ ๋ฐ๊ฒฌํ ํฐ๋ฆฐ๋๋กฌ์ด ์ด์ ์ ๋ฐ๊ฒฌํ ๊ฒ๋ณด๋ค ๊ธธ๋ฉด ๊ฐฑ์
34+ if ( right - left + 1 > maxLength ) {
35+ maxLength = right - left + 1 ;
36+ longestPal = s . substring ( left , right + 1 ) ;
37+ }
38+
39+ left --
40+ right ++
41+ }
42+ }
43+
44+ return longestPal
45+ }
Original file line number Diff line number Diff line change 1+ /**
2+ Do not return anything, modify matrix in-place instead.
3+ */
4+ /**
5+ * 90๋ ํ์ ์ํค๊ธฐ
6+ * ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋
7+ * - ์๊ฐ ๋ณต์ก๋: O(n2)
8+ * - ๊ณต๊ฐ ๋ณต์ก๋: O(1)
9+ * @param matrix
10+ */
11+ function rotate ( matrix : number [ ] [ ] ) : void {
12+ let n = matrix . length ;
13+
14+ // 0,0 -> 2,0
15+ // 1,0 -> 2,1
16+ // 2,0 -> 2,2
17+
18+ // 0,1 -> 1,0
19+ // 1,1 -> 1,1
20+ // 2,1 -> 1,2
21+
22+ // 0,2 -> 0,0
23+ // 1,2 -> 0,1
24+ // 2,2 -> 0,2
25+
26+ // 1 2 3
27+ // 4 5 6
28+ // 7 8 9
29+
30+ // 1 4 7
31+ // 2 5 8
32+ // 3 6 9
33+
34+ // 7 4 1
35+ // 8 5 2
36+ // 9 6 3
37+
38+ // 1. ํ๊ณผ ์ด์ ๋ฐ๊ฟ(ํ๊ณผ ์ด์ ์ ์น)
39+ for ( let i = 0 ; i < n ; i ++ ) {
40+ for ( let j = i ; j < n ; j ++ ) {
41+ // ๋๊ฐ์ ์ ๊ธฐ์ค์ผ๋ก ๋์นญ
42+ if ( i !== j ) {
43+ const temp = matrix [ i ] [ j ] ;
44+ matrix [ i ] [ j ] = matrix [ j ] [ i ] ;
45+ matrix [ j ] [ i ] = temp ;
46+ }
47+ }
48+ }
49+
50+ // 2. ๊ฐ ํ์ ์ข์ฐ๋ก ๋ค์ง๊ธฐ(= 90๋ ํ์ )
51+ for ( let i = 0 ; i < n ; i ++ ) {
52+ for ( let j = 0 ; j < Math . floor ( n / 2 ) ; j ++ ) {
53+ const temp = matrix [ i ] [ j ] ;
54+ matrix [ i ] [ j ] = matrix [ i ] [ n - 1 - j ] ;
55+ matrix [ i ] [ n - 1 - j ] = temp ;
56+ }
57+ }
58+ }
Original file line number Diff line number Diff line change 1+ /**
2+ * Definition for a binary tree node.
3+ * class TreeNode {
4+ * val: number
5+ * left: TreeNode | null
6+ * right: TreeNode | null
7+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+ * this.val = (val===undefined ? 0 : val)
9+ * this.left = (left===undefined ? null : left)
10+ * this.right = (right===undefined ? null : right)
11+ * }
12+ * }
13+ */
14+ /**
15+ * ํธ๋ฆฌ ๋ด์ ๋์ผํ ์๋ธํธ๋ฆฌ๊ฐ ์๋์ง ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
16+ * ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋
17+ * - ์๊ฐ ๋ณต์ก๋: O(nรm) - n(root ๋
ธ๋ ์), m(subRoot ๋
ธ๋ ์)
18+ * - ๊ณต๊ฐ ๋ณต์ก๋: O(n+m) - ์ฒซ ๋ฒ์งธ isSubtree()์ ํธ์ถ ์คํ์ ๊น์ด์ isSameTree()์ ํธ์ถ ์คํ์ ๊น์ด๋ฅผ ๋ํ ๊ฒ
19+ * @param root
20+ * @param subRoot
21+ */
22+ function isSubtree ( root : TreeNode | null , subRoot : TreeNode | null ) : boolean {
23+ if ( ! subRoot ) return true
24+ if ( ! root ) return false
25+
26+ // ์ด์ ์ ํ์ดํ isSameTree๋ฅผ ์ถ๊ฐ
27+ function isSameTree ( p : TreeNode | null , q : TreeNode | null ) {
28+ if ( ! p || ! q ) {
29+ return p === q ;
30+ }
31+ return p . val === q . val && isSameTree ( p . left , q . left ) && isSameTree ( p . right , q . right )
32+ }
33+
34+ if ( isSameTree ( root , subRoot ) ) return true
35+ return isSubtree ( root . left , subRoot ) || isSubtree ( root . right , subRoot )
36+ }
37+
Original file line number Diff line number Diff line change 1+ /**
2+ * Definition for a binary tree node.
3+ * class TreeNode {
4+ * val: number
5+ * left: TreeNode | null
6+ * right: TreeNode | null
7+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+ * this.val = (val===undefined ? 0 : val)
9+ * this.left = (left===undefined ? null : left)
10+ * this.right = (right===undefined ? null : right)
11+ * }
12+ * }
13+ */
14+ /**
15+ * ์ด์งํธ๋ฆฌ ์ ํจ์ฑ ๊ฒ์ฌํ๊ธฐ
16+ * ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋
17+ * - ์๊ฐ ๋ณต์ก๋: O(n) - n: ๋
ธ๋์ ์ด ๊ฐ์
18+ * - ๊ณต๊ณค ๋ณต์ก๋: O(h) - h: ํธ๋ฆฌ์ ๋์ด
19+ * @param root
20+ */
21+ function isValidBST ( root : TreeNode | null ) : boolean {
22+ if ( ! root ) return true ;
23+
24+ function isValid ( node : TreeNode | null , min : number , max : number ) : boolean {
25+ if ( ! node ) return true ;
26+ if ( node . val <= min || node . val >= max ) return false ;
27+
28+ return isValid ( node . left , min , node . val ) &&
29+ isValid ( node . right , node . val , max )
30+ }
31+
32+ // ์ด๊ธฐ ํธ์ถ (๋ฃจํธ ๋
ธ๋์ ๋ฒ์๋ ๋ฌดํ๋)
33+ return isValid ( root , - Infinity , Infinity )
34+ }
You canโt perform that action at this time.
0 commit comments