File tree Expand file tree Collapse file tree 5 files changed +209
-0
lines changed
longest-substring-without-repeating-characters Expand file tree Collapse file tree 5 files changed +209
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * ์ฃผ์ด์ง ๋ฌธ์์ด์์ ๋ฐ๋ณต๋์ง ์๋ ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ฐํ.
3
+ * @param {sting } s - ์ฃผ์ด์ง ๋ฌธ์์ด
4
+ * @returns {number } ์ฃผ์ด์ง ๋ฌธ์์ด์์ ์ค๋ณต ๋ฌธ์๊ฐ ์๋ ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด
5
+ *
6
+ * ์๊ฐ ๋ณต์ก๋: O(n)
7
+ * - ๋ฌธ์์ด 1ํ ์ํ
8
+ *
9
+ * ๊ณต๊ฐ ๋ณต์ก๋: O(n)
10
+ * - ์ต๋ ๋ฌธ์์ด์ ๋ชจ๋ ๋ฌธ์๋ฅผ Map์ ์ ์ฅํ๋ฏ๋ก ์
๋ ฅ ๋ฌธ์์ด์ ๊ธธ์ด์ ๋น๋กํ๋ ๊ณต๊ฐ์ ์ฌ์ฉ
11
+ */
12
+ function lengthOfLongestSubstring ( s : string ) : number {
13
+ // ๊ฐ ๋ฌธ์์ idx๋ฅผ ๋ณด๊ดํ Map
14
+ const charMap : Map < string , number > = new Map ( ) ;
15
+
16
+ // substring ์ต๋ ๊ธธ์ด
17
+ let maxLen = 0 ;
18
+ // substring ์์์
19
+ let start = 0 ;
20
+
21
+ for ( let end = 0 ; end < s . length ; end ++ ) {
22
+ const char = s [ end ] ;
23
+
24
+ // ๋ฌธ์๊ฐ ์ด์ ์ ๋ฑ์ฅํ์ผ๋ฉฐ, ์๋์ฐ์ ์์์ (start)๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ ์
๋ฐ์ดํธ
25
+ const prevIdx = charMap . get ( char ) ;
26
+ if ( prevIdx && prevIdx >= start ) {
27
+ start = prevIdx + 1 ; // ์ค๋ณต ๋ฌธ์ ์ดํ๋ก ์๋์ฐ์ ์์์ ์ด๋
28
+ }
29
+
30
+ // ํ์ฌ ๋ฌธ์์ ์์น ์
๋ฐ์ดํธ
31
+ charMap . set ( char , end ) ;
32
+
33
+ // ์ต๋ ๊ธธ์ด ๊ฐฑ์
34
+ maxLen = Math . max ( maxLen , end - start + 1 ) ;
35
+
36
+ }
37
+
38
+ return maxLen ;
39
+ }
40
+
Original file line number Diff line number Diff line change
1
+ /**
2
+ * 2์ฐจ์ ๋ฐฐ์ด์ ๋๋ฉฐ ์ํ์ข์ฐ๋ก ์ด๋ํ ์ ์ฐ์ํ์ฌ ์ด๋ํ ์ ์๋ ๊ณต๊ฐ(์ฌ) ์ฐพ๊ธฐ
3
+ * @param {sting[][] } grid - 2์ฐจ์ ๋ฐฐ์ด
4
+ * @returns {number } ๋ง๋ค ์ ์๋ ๊ณต๊ฐ(์ฌ)์ ๊ฐฏ์
5
+ *
6
+ * ์๊ฐ ๋ณต์ก๋: O(n * m)
7
+ * m == grid.length
8
+ * n == grid[i].length
9
+ *
10
+ * ๊ณต๊ฐ ๋ณต์ก๋: O(n * m)
11
+ * m == grid.length
12
+ * n == grid[i].length
13
+ */
14
+ function numIslands ( grid : string [ ] [ ] ) : number {
15
+ // ๋ฐฉ๋ฌธ ๋ฐฐ์ด ์์ฑ
16
+ const visited : boolean [ ] [ ] = Array . from (
17
+ { length : grid . length } ,
18
+ ( ) => Array ( grid [ 0 ] . length ) . fill ( false )
19
+ ) ;
20
+
21
+ let islands = 0 ;
22
+
23
+ const bfs = ( i : number , j : number ) : void => {
24
+ // ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
25
+ visited [ i ] [ j ] = true ;
26
+
27
+ // ์, ํ, ์ข, ์ฐ
28
+ const directions : [ number , number ] [ ] = [
29
+ [ - 1 , 0 ] ,
30
+ [ 1 , 0 ] ,
31
+ [ 0 , - 1 ] ,
32
+ [ 0 , 1 ] ,
33
+ ] ;
34
+
35
+ for ( const direction of directions ) {
36
+ const nextI = i + direction [ 0 ] ;
37
+ const nextJ = j + direction [ 1 ] ;
38
+ if (
39
+ nextI >= 0 &&
40
+ nextI < grid . length &&
41
+ nextJ >= 0 &&
42
+ nextJ < grid [ 0 ] . length &&
43
+ ! visited [ nextI ] [ nextJ ] &&
44
+ grid [ nextI ] [ nextJ ] === '1'
45
+ ) {
46
+ bfs ( nextI , nextJ ) ;
47
+ }
48
+ }
49
+ } ;
50
+
51
+ for ( let i = 0 ; i < grid . length ; i ++ ) {
52
+ for ( let j = 0 ; j < grid [ 0 ] . length ; j ++ ) {
53
+ if ( grid [ i ] [ j ] === '1' && ! visited [ i ] [ j ] ) {
54
+ // ์๋ก์ด ์ฌ ๋ฐ๊ฒฌ
55
+ islands ++ ;
56
+
57
+ // BFS ์คํ
58
+ bfs ( i , j ) ;
59
+ }
60
+ }
61
+ }
62
+
63
+ return islands ;
64
+ }
65
+
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for singly-linked list.
3
+ * class ListNode {
4
+ * val: number
5
+ * next: ListNode | null
6
+ * constructor(val?: number, next?: ListNode | null) {
7
+ * this.val = (val===undefined ? 0 : val)
8
+ * this.next = (next===undefined ? null : next)
9
+ * }
10
+ * }
11
+ */
12
+
13
+ /**
14
+ * linked list ๋ฅผ ๋ค์ง๋ ํจ์.
15
+ *
16
+ * @param {ListNode | null } head - linked list ์ ์์ ๋
ธ๋
17
+ * @returns {ListNode | null } ๋ค์งํ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์ ๋
ธ๋
18
+ *
19
+ * - ์๊ฐ ๋ณต์ก๋(Time Complexity): O(n)
20
+ * - llinked list ๊ธธ์ด ๋งํผ ์ํ
21
+ *
22
+ * - ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity): O(1)
23
+ */
24
+ function reverseList ( head : ListNode | null ) : ListNode | null {
25
+ let prev : ListNode | null = null ;
26
+ let curr : ListNode | null = head ;
27
+
28
+ while ( curr !== null ) {
29
+ const next : ListNode | null = curr . next ; // ๋ค์ ๋
ธ๋๋ฅผ ์ ์ ์ ์ฅ
30
+ curr . next = prev ; // ํ์ฌ ๋
ธ๋์ next๋ฅผ ์ด์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ๋ณ๊ฒฝ
31
+ prev = curr ; // prev๋ฅผ ํ์ฌ ๋
ธ๋๋ก ์
๋ฐ์ดํธ
32
+ curr = next ; // curr๋ฅผ ๋ค์ ๋
ธ๋๋ก ์ด๋
33
+ }
34
+
35
+ return prev ; // prev๊ฐ ๋ค์งํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์ ๋
ธ๋๊ฐ ๋ฉ๋๋ค.
36
+ } ;
37
+
Original file line number Diff line number Diff line change
1
+ /**
2
+ * 2์ฐจ์ ๋ฐฐ์ด์ ๋๋ฉฐ 0์ ์ ์ฉํด์ผํ๋ row์ col์ ์กฐํ ํ ๋ค์ 2์ฐจ์ ๋ฐฐ์ด์ ๋๋ฉฐ 0์ผ๋ก ๋ณํ
3
+ * @param {number[][] } matrix - 2์ฐจ์ ๋ฐฐ์ด
4
+ * @return
5
+ *
6
+ * - ์๊ฐ ๋ณต์ก๋: O(m * n)
7
+ * - m x n ํฌ๊ธฐ์ ๋ฐฐ์ด์ 2๋ฒ ์ํ
8
+ *
9
+ * - ๊ณต๊ฐ ๋ณต์ก๋: O(m + n)
10
+ * - ์ต๋ m(ํ) + n(์ด) ํฌ๊ธฐ์ Set์ ์ฌ์ฉ
11
+ */
12
+ function setZeroes ( matrix ) {
13
+ const m = matrix . length ;
14
+ const n = matrix [ 0 ] . length ;
15
+
16
+ const rowZeroSet = new Set ( ) ;
17
+ const colZeroSet = new Set ( ) ;
18
+
19
+ // ๋ฐฐ์ด์ ๋๋ฉฐ 0์ผ๋ก ๋ฐ๊ฟ์ผ ํ ํ๊ณผ ์ด์ ๊ธฐ๋ก
20
+ for ( let i = 0 ; i < m ; i ++ ) {
21
+ for ( let j = 0 ; j < n ; j ++ ) {
22
+ if ( matrix [ i ] [ j ] === 0 ) {
23
+ rowZeroSet . add ( i ) ;
24
+ colZeroSet . add ( j ) ;
25
+ }
26
+ }
27
+ }
28
+
29
+ // 0์ผ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ ํ๊ณผ ์ด์ ๋ณํ
30
+ for ( let i = 0 ; i < m ; i ++ ) {
31
+ for ( let j = 0 ; j < n ; j ++ ) {
32
+ if ( rowZeroSet . has ( i ) || colZeroSet . has ( j ) ) {
33
+ matrix [ i ] [ j ] = 0 ;
34
+ }
35
+ }
36
+ }
37
+ }
38
+
Original file line number Diff line number Diff line change
1
+
2
+ /**
3
+ * m * n ๊ทธ๋ฆฌ๋์์ ์ข์ธก ์๋จ์์ ์ฐ์ธก ํ๋จ๊น์ง ๊ฐ ์ ์๋ ๊ฒฝ๋ก์ ์
4
+ * @param {number } m - ๊ทธ๋ฆฌ๋์ ํ ๊ธธ์ด
5
+ * @param {number } n - ๊ทธ๋ฆฌ๋์ ์ด ๊ธธ์ด
6
+ * @returns {number } ์ฐ์ธก ํ๋จ๊น์ง ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์ ์
7
+ *
8
+ * - ์๊ฐ ๋ณต์ก๋: O(m * n)
9
+ * - ์ ์ฒด ์
์ ํ ๋ฒ์ฉ ์ํ
10
+ *
11
+ * - ๊ณต๊ฐ ๋ณต์ก๋: O(n)
12
+ * - 1์ฐจ์ ๋ฐฐ์ด ์ฌ์ฉ (์ด ํฌ๊ธฐ๋งํผ์ ๋ฐฐ์ด)
13
+ */
14
+ function uniquePaths ( m : number , n : number ) : number {
15
+ // n(์ด) ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์์ฑ
16
+ const dp = Array ( n ) . fill ( 1 ) ;
17
+
18
+
19
+ for ( let i = 1 ; i < m ; i ++ ) {
20
+ for ( let j = 1 ; j < n ; j ++ ) {
21
+ // ํ์ฌ ๊ฐ = ์์ชฝ(dp[j]) + ์ผ์ชฝ(dp[j-1])
22
+ dp [ j ] = dp [ j ] + dp [ j - 1 ] ;
23
+ }
24
+ }
25
+
26
+ // dp[n-1]์ ์ฐ์ธก ํ๋จ๊น์ง์ ๊ฒฝ๋ก ์๊ฐ ์ ์ฅ
27
+ return dp [ n - 1 ] ;
28
+ }
29
+
You canโt perform that action at this time.
0 commit comments