[Leetcode] 73. Set Matrix Zeroes

Algorithm|2021. 8. 15. 18:51
반응형

Identifying the Problem

출처 leetcode

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

댓글()