Skip to content

Commit 8ec2f64

Browse files
committed
Set Matrix Zeroes Solution
1 parent d72efff commit 8ec2f64

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

set-matrix-zeroes/clara-shin.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/**
2+
* 행렬에서 0을 찾아, 해당 요소의 전체 행과 열을 0으로 변환하는 문제
3+
*
4+
* 팔로우업: O(1) 공간 복잡도로 해결하기
5+
* - 원래 행렬의 첫번째 행과 열을 사용, 0이 있는 행과 열을 표시(추가 공간사용 없이)
6+
* 접근 방법:
7+
* 1. 첫번째 행과 열에 0이 있는지 확인, 있다면 별도의 변수에 저장
8+
* 2. 첫번째 행과 열을 제외한 나머지 행렬을 순회 ➡️ 0을 발견하면 해당 위치의 행과 열을 0으로 설정
9+
* 3. 설정된 마커 기반으로 내부 행렬의 요소를 0으로 업데이트
10+
*
11+
* 시간복잡도: O(m*n) ➡️ 행렬을 두번 순회
12+
* 공간복잡도: O(1) ➡️ 추가 배열 사용 안함
13+
*/
14+
/**
15+
* @param {number[][]} matrix
16+
* @return {void} Do not return anything, modify matrix in-place instead.
17+
*/
18+
var setZeroes = function (matrix) {
19+
if (!matrix || matrix.length === 0 || matrix[0].length === 0) return;
20+
21+
const m = matrix.length;
22+
const n = matrix[0].length;
23+
24+
// 한번의 반복문으로 첫번째 행과 열을 체크
25+
let firstRowHasZero = false;
26+
let firstColHasZero = false;
27+
28+
// 첫번째 행 체크
29+
for (let j = 0; j < n; j++) {
30+
if (matrix[0][j] === 0) {
31+
firstRowHasZero = true;
32+
break;
33+
}
34+
}
35+
// 첫번째 열 체크
36+
for (let i = 0; i < m; i++) {
37+
if (matrix[i][0] === 0) {
38+
firstColHasZero = true;
39+
break;
40+
}
41+
}
42+
43+
// 첫번째 행과 열을 제외한 나머지 행렬을 순회, 마커 설정
44+
for (let i = 1; i < m; i++) {
45+
for (let j = 1; j < n; j++) {
46+
if (matrix[i][j] === 0) {
47+
matrix[i][0] = 0; // 해당 행의 첫번째 열을 0으로 마킹
48+
matrix[0][j] = 0; // 해당 열의 첫번째 행을 0으로 마킹
49+
}
50+
}
51+
}
52+
// 마커를 기반으로 내부 행렬의 요소를 0으로 업데이트
53+
for (let i = 1; i < m; i++) {
54+
for (let j = 1; j < n; j++) {
55+
if (matrix[i][0] === 0 || matrix[0][j] === 0) {
56+
matrix[i][j] = 0;
57+
}
58+
}
59+
}
60+
// 첫번째 행과 열을 업데이트
61+
if (firstRowHasZero) {
62+
for (let j = 0; j < n; j++) {
63+
matrix[0][j] = 0;
64+
}
65+
}
66+
if (firstColHasZero) {
67+
for (let i = 0; i < m; i++) {
68+
matrix[i][0] = 0;
69+
}
70+
}
71+
};

0 commit comments

Comments
 (0)