Skip to content

Commit d1c56fc

Browse files
authored
Merge pull request #942 from Yjason-K/main
[Week7] gomgom22
2 parents 69f2017 + 791ccd3 commit d1c56fc

File tree

5 files changed

+209
-0
lines changed

5 files changed

+209
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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+

โ€Žnumber-of-islands/Yjason-K.ts

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
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+

โ€Žreverse-linked-list/Yjason-K.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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+

โ€Žset-matrix-zeroes/Yjason-K.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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+

โ€Žunique-paths/Yjason-K.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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+

0 commit comments

Comments
ย (0)