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