[Leetcode] 73. Set Matrix Zeroes
Algorithm2021. 8. 15. 18:51
반응형
Identifying the Problem
matrix 중 0이 있다면 해당 0의 행과 열을 모두 0으로 바꾼다.
Organizing thoughts
MAIN IDEA : 0이 있는 행, 열의 위치를 저장해두었다가, 저장된 위치를 모두 0으로 바꾼다.
1. matrix 전체를 탐색하며 0이 있는 경우
2. 0의 행 index와 열 index를 저장
3. 행 또는 열의 길이만큼 탐색하며, 저장된 index에 해당하는 행과 열을 모두 0으로 바꾸어 준다.
Sourcecode
void setZeroes(int** matrix, int matrixSize, int* matrixColSize)
{
int* cols = (int*) calloc(*matrixColSize, sizeof(int)); //열의 index를 저장할 배열
int* rows = (int*) calloc(matrixSize, sizeof(int)); //행의 index를 저장할 배열
for(int i = 0 ; i<matrixSize; i++) // 1과정
{
for(int k = 0 ; k<*matrixColSize; k++)
{
if(matrix[i][k] == 0) // 2과정
{
rows[i] = 1; //1은 해당 위치에 0이 있다는 표시
cols[k] = 1;
}
}
} //0이 있는 행과 열 조사
for(int i = 0 ; i<matrixSize; i++) // 3과정
{
if(rows[i] == 1)
{
for(int j = 0; j< *matrixColSize; j++)
matrix[i][j] = 0;
}
} //조사한 행에 0이 있었다면, 해당 행을 모두 0으로 초기화
for(int i = 0 ; i< *matrixColSize; i++) // 3과정
{
if(cols[i] == 1)
{
for(int j = 0; j< matrixSize; j++)
matrix[j][i] = 0;
}
} //조사한 열에 0이 있었다면, 해당 열을 모두 0으로 초기화
}
New things learned
malloc은 int* arr = malloc(sizeof(int) * n) 이런 식으로 사용했지만,
calloc은 arr = (int*) calloc(5, sizeof(int)) 이런 식으로 써야 한다.
반응형
'Algorithm' 카테고리의 다른 글
[Leetcode] 139. Word Break (0) | 2021.08.16 |
---|---|
[Leetcode] 15. 3Sum (0) | 2021.08.15 |
[Leetcode] 54. Spiral Matrix (0) | 2021.08.15 |
[Leetcode] 300. Longest Increasing Subsequence (0) | 2021.08.12 |
[Leetcode] 322. Coin Change (0) | 2021.08.12 |
댓글()