Skip to content

Commit 4db24ed

Browse files
authored
Merge pull request #2224 from Blossssom/main
[Blossssom] WEEK 07 solutions
2 parents cce3f3c + 067953e commit 4db24ed

File tree

5 files changed

+321
-0
lines changed

5 files changed

+321
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/**
2+
* @param s - ๋ฌธ์ž์—ด ์ž…๋ ฅ๊ฐ’
3+
* @returns - ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ค‘๋ณต์—†์ด ๊ฐ€์žฅ ๊ธด ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
4+
* @description
5+
* - ํ’€์ด 1: ์•ž๋‹จ๊ณ„๋ฅผ Map์œผ๋กœ ์ •๋ฆฌ ํ›„ ๊ฐ™์€ ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ’์„ ์‚ญ์ œํ•  ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
6+
* - ์‚ญ์ œ ์ „ ๊ธธ์ด๋ฅผ ๋ˆ„์ ํ•ด ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๋ฐ˜ํ™˜
7+
*
8+
* - ํ’€์ด 2: ๋ฐ˜๋ณต์„ ๋Œ๋ฉฐ ์ฐพ๋Š”๊ฒŒ ์•„๋‹Œ ํ•ด๋‹น idx๋กœ ์ ํ”„ํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ๋ณ€๊ฒฝ
9+
* - ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ์ด์ „ ํ’€์ด 1๋ณด๋‹ค ๊ฐœ์„ 
10+
*/
11+
12+
// function lengthOfLongestSubstring(s: string): number {
13+
// const saveMap: Map<string, boolean> = new Map();
14+
// const arr = [];
15+
// for (let i = 0; i < s.length; i++) {
16+
// if (saveMap.has(s[i])) {
17+
// for (const key of saveMap.keys()) {
18+
// arr.push(saveMap.size);
19+
// saveMap.delete(key);
20+
// if (key === s[i]) {
21+
// break;
22+
// }
23+
// }
24+
// }
25+
// saveMap.set(s[i], true);
26+
// }
27+
28+
// arr.push(saveMap.size);
29+
30+
// return Math.max(...arr);
31+
// }
32+
33+
function lengthOfLongestSubstring(s: string): number {
34+
const map = new Map<string, number>();
35+
36+
let maxLength = 0;
37+
let start = 0;
38+
39+
for (let i = 0; i < s.length; i++) {
40+
const char = s[i];
41+
// ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ์žˆ๊ณ , ๊ทธ ๊ฐ’์ด start ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„ ๊ฒฝ์šฐ
42+
// start๋ฅผ ์ค‘๋ณต ๋ฌธ์ž ๋ฐ”๋กœ ๋‹ค์Œ ์นธ์œผ๋กœ ์ด๋™
43+
if (map.has(char) && map.get(char)! >= start) {
44+
start = map.get(char)! + 1;
45+
}
46+
47+
map.set(char, i);
48+
49+
// ํ˜„์žฌ idx - ์‹œ์ž‘์  + 1 === ๋ˆ„์  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
50+
maxLength = Math.max(maxLength, i - start + 1);
51+
}
52+
53+
return maxLength;
54+
}
55+
56+
const s = "dvdf";
57+
lengthOfLongestSubstring(s);
58+
59+
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/**
2+
* @param grid - ์„ฌ(1), ๋ฌผ(0)๋กœ ์ด๋ค„์ง„ m * n 2์ฐจ์› ๋ฐฐ์—ด
3+
* @returns - ์„ฌ์˜ ๊ฐฏ์ˆ˜ (์—ฐ๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ๊ฐœ๋ณ„ ์„ฌ)
4+
* @description
5+
* - dfs ๊นŒ์ง„ ์•Œ์•˜๋Š”๋ฐ AI์˜ ๋„์›€์„ ๋ฐ›์•˜์Œ
6+
* - ํƒ์ƒ‰ ๋ฌธ์ œ์—์„œ ๋””ํ…Œ์ผ๊นŒ์ง€ ์ ‘๊ทผํ•˜๋Š” ์—ฐ์Šต์ด ํ•„์š”
7+
* - ์‹œ๊ฐ„ ๋ณต์žก๋„ O(M * N)
8+
*/
9+
10+
function numIslands(grid: string[][]): number {
11+
const visit = Array.from({ length: grid.length }, () =>
12+
Array.from({ length: grid[0].length }, () => false)
13+
);
14+
15+
const moveY = [0, 0, -1, 1];
16+
const moveX = [-1, 1, 0, 0];
17+
18+
let cnt = 0;
19+
function dfs(y: number, x: number) {
20+
visit[y][x] = true;
21+
// 4 ๋ฐฉํ–ฅ index ํ™•์ธ
22+
for (let i = 0; i < 4; i++) {
23+
const nextY = y + moveY[i];
24+
const nextX = x + moveX[i];
25+
26+
if (
27+
nextX >= 0 &&
28+
nextY >= 0 &&
29+
nextX < grid[0].length &&
30+
nextY < grid.length &&
31+
grid[nextY][nextX] === "1" &&
32+
!visit[nextY][nextX]
33+
) {
34+
dfs(nextY, nextX);
35+
}
36+
}
37+
}
38+
39+
for (let i = 0; i < grid.length; i++) {
40+
for (let j = 0; j < grid[0].length; j++) {
41+
if (grid[i][j] === "1" && !visit[i][j]) {
42+
cnt++;
43+
dfs(i, j);
44+
}
45+
}
46+
}
47+
48+
return cnt;
49+
}
50+
51+
const grid = [
52+
["1", "1", "0", "0", "0"],
53+
["1", "1", "0", "0", "0"],
54+
["0", "0", "1", "0", "0"],
55+
["0", "0", "0", "1", "1"],
56+
];
57+
numIslands(grid);
58+
59+
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
class ListNode {
2+
val: number;
3+
next: ListNode | null;
4+
constructor(val?: number, next?: ListNode | null) {
5+
this.val = val === undefined ? 0 : val;
6+
this.next = next === undefined ? null : next;
7+
}
8+
}
9+
10+
/**
11+
*
12+
* @param head - ListNode ๊ตฌ์กฐ์ฒด
13+
* @returns - ์—ญ์ˆœ head
14+
* @description
15+
* - 1์ฐจ ์‹œ๋„: ๋‹จ์ˆœ val ์ถ”์ถœ ํ›„ ์—ญ์ˆœ์œผ๋กœ ์žฌ ๋ฐฐ์น˜
16+
* - 2์ฐจ ์‹œ๋„: head๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์Šค์™€ํ•‘, prev์— ์žฌ ๋ฐฐ์น˜ ํ•˜๋ฉฐ ์ง„ํ–‰
17+
*/
18+
19+
// function reverseList(head: ListNode | null): ListNode | null {
20+
// if (!head) {
21+
// return head;
22+
// }
23+
24+
// let currentNode: ListNode | null = head;
25+
// let reversed: ListNode = new ListNode();
26+
// const saveArr = [];
27+
// while (currentNode?.val !== undefined) {
28+
// saveArr.push(currentNode.val);
29+
// currentNode = currentNode.next;
30+
// }
31+
32+
// let check = reversed;
33+
// for (let i = saveArr.length; i > 0; i--) {
34+
// check.val = saveArr[i - 1];
35+
// if (i - 1) {
36+
// check.next = new ListNode();
37+
// check = check.next;
38+
// }
39+
// }
40+
41+
// return reversed;
42+
// }
43+
44+
function reverseList(head: ListNode | null): ListNode | null {
45+
if (!head) {
46+
return null;
47+
}
48+
49+
let prevNode: ListNode | null = null;
50+
let nextNode: ListNode | null = null;
51+
52+
console.log(head);
53+
while (head) {
54+
nextNode = head.next;
55+
head.next = prevNode;
56+
prevNode = head;
57+
head = nextNode;
58+
console.log(head, nextNode, prevNode);
59+
}
60+
61+
return prevNode;
62+
}
63+
64+
const head = new ListNode(
65+
0,
66+
new ListNode(1, new ListNode(4, new ListNode(-2)))
67+
);
68+
69+
reverseList(head);
70+
71+
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/**
2+
* @param matrix - 2์ค‘ ๋ฐฐ์—ด ๊ทธ๋ฆฌ๋“œ
3+
* @description
4+
* - ์š”์†Œ๊ฐ€ 0์ผ ๊ฒฝ์šฐ ์†ํ•œ ํ–‰๊ณผ ์—ด ์ „์ฒด๋ฅผ 0์œผ๋กœ ๋ณ€๊ฒฝ
5+
*
6+
* - ํ’€์ด 1. ๋‹จ์ˆœํ•˜๊ฒŒ 0 ๋ชฉ๋ก์„ ๋งŒ๋“ค์–ด ํ•ด๋‹น ์š”์†Œ์˜ ํ–‰๊ณผ ์—ด์„ ๋ณ€๊ฒฝ
7+
* - ํ’€์ด 2. ํ’€์ด 1์€ ๋งค๋ฒˆ ๋ฎ์–ด์”Œ์šฐ๊ธฐ๋ฅผ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ ํ–‰๊ณผ ์—ด ๋งˆ๋‹ค ์ฒซ๋ฒˆ ์งธ ์š”์†Œ๋ฅผ ๋ฉ”๋ชจ์žฅ์œผ๋กœ ์‚ฌ์šฉ.
8+
* - ๋‚ด๋ถ€๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ง„ํ–‰
9+
*/
10+
11+
// function setZeroes(matrix: number[][]): void {
12+
// const zeroes = [];
13+
14+
// for (let i = 0; i < matrix.length; i++) {
15+
// for (let j = 0; j < matrix[0].length; j++) {
16+
// if (matrix[i][j] === 0) {
17+
// zeroes.push([i, j]);
18+
// }
19+
// }
20+
// }
21+
22+
// for (let i = 0; i < zeroes.length; i++) {
23+
// const [row, col] = zeroes[i];
24+
// console.log(row, col);
25+
26+
// matrix[row] = Array.from({ length: matrix[row].length }, () => 0);
27+
// console.log(matrix);
28+
29+
// for (let j = 0; j < matrix.length; j++) {
30+
// matrix[j][col] = 0;
31+
// }
32+
// }
33+
// }
34+
35+
function setZeroes(matrix: number[][]): void {
36+
const m = matrix.length;
37+
const n = matrix[0].length;
38+
let isFirstRowZero = false;
39+
let isFirstColZero = false;
40+
41+
for (let i = 0; i < m; i++) {
42+
if (!matrix[i][0]) {
43+
isFirstColZero = true;
44+
}
45+
}
46+
47+
for (let j = 0; j < n; j++) {
48+
if (!matrix[0][j]) {
49+
isFirstRowZero = true;
50+
}
51+
}
52+
53+
for (let i = 1; i < m; i++) {
54+
for (let j = 1; j < n; j++) {
55+
if (!matrix[i][j]) {
56+
matrix[i][0] = 0;
57+
matrix[0][j] = 0;
58+
}
59+
}
60+
}
61+
62+
for (let i = 1; i < m; i++) {
63+
for (let j = 1; j < n; j++) {
64+
if (matrix[i][0] === 0 || matrix[0][j] === 0) {
65+
matrix[i][j] = 0;
66+
}
67+
}
68+
}
69+
70+
if (isFirstColZero) {
71+
for (let i = 0; i < m; i++) matrix[i][0] = 0;
72+
}
73+
if (isFirstRowZero) {
74+
for (let j = 0; j < n; j++) matrix[0][j] = 0;
75+
}
76+
}
77+
78+
const matrix = [
79+
[1, 1, 1],
80+
[1, 0, 1],
81+
[1, 1, 1],
82+
];
83+
84+
setZeroes(matrix);
85+
86+

โ€Žunique-paths/Blossssom.tsโ€Ž

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* @param m - grid row length
3+
* @param n - grid col length
4+
* @returns - ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ๋ชจ์„œ๋ฆฌ์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ์˜ ์ˆ˜
5+
* @description
6+
* - [0, 0] ์‹œ์ž‘
7+
* - ์•„๋ž˜์ชฝ ํ˜น์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ๋งŒ ์ด๋™ ๊ฐ€๋Šฅ
8+
* - dfs์ธ์ค„ ์•Œ์•˜๋Š”๋ฐ visit๋„ ํ•„์š” ์—†๊ณ  ๊ฒฐ๊ตญ dp.
9+
*
10+
* - ํ’€์ด 1. ๊ฐ ์ง€์ ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์ด์ „ idx์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋“ค (x - 1, y - 1)์˜ ํ•ฉ์ด๋‹ค.
11+
* - ๋”ฐ๋ผ์„œ ์ด์ „ idx์˜ ๊ฐ’๋“ค์„ ๋ˆ„์ ํ•ด๊ฐ€๋ฉฐ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์ธ ๋„์ฐฉ์ ์˜ ๋ˆ„์  ๊ฐ’์ด ๊ฒฐ๊ณผ.
12+
*
13+
* - ํ’€์ด 2. ํ’€์ด 1๊ณผ ๋ฐฉ์‹์€ ๊ฐ™์ง€๋งŒ 1์ฐจ์› ๋ฐฐ์—ด์„ ๋ฎ์–ด ์”Œ์›Œ๊ฐ€๋ฉฐ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์ž„
14+
*/
15+
16+
// function uniquePaths(m: number, n: number): number {
17+
// const dp = Array.from({ length: m }, () =>
18+
// Array.from({ length: n }, () => 1)
19+
// );
20+
21+
// for (let i = 1; i < m; i++) {
22+
// for (let j = 1; j < n; j++) {
23+
// dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
24+
// console.log(dp);
25+
// }
26+
// }
27+
28+
// return dp[m - 1][n - 1];
29+
// }
30+
31+
function uniquePaths(m: number, n: number): number {
32+
const dp = Array.from({ length: n }, () => 1);
33+
34+
for (let i = 1; i < m; i++) {
35+
for (let j = 1; j < n; j++) {
36+
dp[j] += dp[j - 1];
37+
}
38+
}
39+
return dp[n - 1];
40+
}
41+
42+
const m = 3;
43+
const n = 7;
44+
uniquePaths(m, n);
45+
46+

0 commit comments

Comments
ย (0)