Skip to content

Commit 4337a1e

Browse files
committed
feat(soobing): week7 > set-matrix-zeroes
1 parent 009270c commit 4337a1e

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

โ€Žset-matrix-zeroes/soobing.ts

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/**
2+
* ๋ฌธ์ œ ์„ค๋ช…
3+
* - 0์œผ๋กœ ํ‘œ์‹œ๋œ ์ขŒํ‘œ์˜ ํ–‰๊ณผ ์—ด์„ ๋ชจ๋‘ 0์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ
4+
* - ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŒ๋“ค์ง€ ๋ง๊ณ , ํ•ต์‹ฌ์€ in place!! ์ž…๋ ฅ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์„œ ํ‘ธ๋Š”๊ฒƒ์„ ์›ํ•จ
5+
* - "in-place"๋กœ ํ’€๋ผ๊ณ  ํ•˜๋ฉด ๋ณดํ†ต์€ O(1) ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๊ธฐ๋Œ€
6+
*
7+
* ์•„์ด๋””์–ด
8+
* 1) ํ–‰๋ ฌ์„ ์ „์ฒด ์ˆœํšŒํ•˜๋ฉด์„œ 0์˜ ์œ„์น˜๋ฅผ set์— ๊ธฐ์–ตํ•ด๋†จ๋‹ค๊ฐ€ ๋‹ค์‹œ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ณ€๊ฒฝ -> ๊ณต๊ฐ„ ๋ณต์žก๋„ O(m + n)
9+
*
10+
* 2) ์ฒซ๋ฒˆ์งธ ํ–‰๊ณผ ์—ด์„ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์‚ฌ์šฉ -> ๊ณต๊ฐ„ ๋ณต์žก๋„ O(1)
11+
* - ์ฒซ๋ฒˆ์งธ ํ–‰๊ณผ ์—ด์— 0์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ ํ›„ ๋ณ€์ˆ˜๋กœ ๋”ฐ๋กœ ๋บ€๋‹ค
12+
* - ๋‚˜๋จธ์ง€ ์…€ ์ค‘์—์„œ 0์ด ์กด์žฌํ•˜๋Š”์ง€ ์ˆœํšŒํ•˜๊ณ  ์žˆ์œผ๋ฉด ์ฒซ๋ฒˆ์งธ ํ–‰/์—ด์— ํ‘œ์‹œํ•œ๋‹ค
13+
* - ๋‚˜๋จธ์ง€ ์…€์„ ๋‹ค์‹œ ์ˆœํšŒํ•˜๋ฉด์„œ ์ฒซ๋ฒˆ์งธ ์—ด์„ ์ฐธ๊ณ ํ•˜์—ฌ 0์œผ๋กœ ์น˜ํ™˜ํ•œ๋‹ค
14+
* - ์ฒซ๋ฒˆ์งธ ํ–‰๊ณผ ์—ด์„ 0์œผ๋กœ ๋ฐ”๊ฟ”์•„ํ•œ๋‹ค๋ฉด ์ฒ˜๋ฆฌํ•œ๋‹ค.
15+
*/
16+
17+
/**
18+
1๋ฒˆ ๋ฐฉ๋ฒ•
19+
*
20+
function setZeroes(matrix: number[][]): void {
21+
const rows = matrix.length;
22+
const cols = matrix[0].length;
23+
const zeroRows = new Set<number>();
24+
const zeroCols = new Set<number>();
25+
26+
for (let r = 0; r < rows; r++) {
27+
for (let c = 0; c < cols; c++) {
28+
if (matrix[r][c] === 0) {
29+
zeroRows.add(r);
30+
zeroCols.add(c);
31+
}
32+
}
33+
}
34+
35+
for (let r = 0; r < rows; r++) {
36+
for (let c = 0; c < cols; c++) {
37+
if (zeroRows.has(r) || zeroCols.has(c)) {
38+
matrix[r][c] = 0;
39+
}
40+
}
41+
}
42+
}
43+
*/
44+
45+
function setZeroes(matrix: number[][]): void {
46+
const rows = matrix.length;
47+
const cols = matrix[0].length;
48+
let firstRowHasZero = false;
49+
let firstColHasZero = false;
50+
51+
// ์ฒซ๋ฒˆ์งธ ํ–‰๊ณผ ์—ด์— 0์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
52+
for (let r = 0; r < rows; r++) {
53+
if (matrix[r][0] === 0) {
54+
firstColHasZero = true;
55+
break;
56+
}
57+
}
58+
for (let c = 0; c < cols; c++) {
59+
if (matrix[0][c] === 0) {
60+
firstRowHasZero = true;
61+
break;
62+
}
63+
}
64+
65+
// ๋‚˜๋จธ์ง€ ์…€์ค‘์— 0์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ ํ›„ ์ฒซ๋ฒˆ์จฐ ํ–‰๊ณผ ์—ด์— ํ‘œ์‹œ
66+
for (let r = 1; r < rows; r++) {
67+
for (let c = 1; c < cols; c++) {
68+
if (matrix[r][c] === 0) {
69+
matrix[r][0] = 0;
70+
matrix[0][c] = 0;
71+
}
72+
}
73+
}
74+
75+
// ๋‚˜๋จธ์ง€ ์…€์„ ๋‹ค์‹œ ์ˆœํšŒํ•˜๋ฉด์„œ ์ฒซ๋ฒˆ์งธ ํ–‰/์—ด์ด 0์ธ ๊ฒฝ์šฐ ๊ฐ™์€ ํ–‰/์—ด๋„ 0์œผ๋กœ ๋ณ€๊ฒฝ
76+
for (let r = 1; r < rows; r++) {
77+
for (let c = 1; c < cols; c++) {
78+
if (matrix[r][0] === 0 || matrix[0][c] === 0) {
79+
matrix[r][c] = 0;
80+
}
81+
}
82+
}
83+
84+
// ์ฒซ๋ฒˆ์งธ ํ–‰/์—ด์ด 0์ธ๊ฒฝ์šฐ ํ•ด๋‹น ํ–‰/์—ด๋„ 0์œผ๋กœ ๋ณ€๊ฒฝ
85+
if (firstRowHasZero) {
86+
for (let c = 0; c < cols; c++) {
87+
matrix[0][c] = 0;
88+
}
89+
}
90+
if (firstColHasZero) {
91+
for (let r = 0; r < rows; r++) {
92+
matrix[r][0] = 0;
93+
}
94+
}
95+
}

0 commit comments

Comments
ย (0)