프로그램의 개요를 설명하면, 먼저 사용자가 크기를 정한 동적 할당 배열에 수를 입력받음. (출력은 2차원 배열인 것 처럼 하지만 포인터를 이용한 1차원 동적할당임.)
그리고 그 배열 (mat)을 함수의 argument로 넘겨서, 0이 아닌 값만을 저장하는 행렬로 만드는 것.
저장 방법은 다음 사진과 같음.
다음은 내가 짠 함수
int *non_zero_mat (int *mat,int r_leng, int c_leng){
int i,r,c,m = 0; //루프 통제용 함수. r이 행의 길이(r_leng)와 같아질때까지 , c는 열의 길이(c_leng)와 같아질때까지 루프를 돈다.
int *mat2;
mat2 = (int*) calloc ( count*3,sizeof(int));
/*count는 행렬의 원소 중에 0이 아닌 것이 얼마나 되는지 세는 전역변수. 새로운 배열의 크기는 arr[count][3]이 됨.*/
for(r=0; r<r_leng; r++){
for(c=0; c<c_leng; c++){
if(mat[i-r_leng] != 0){
mat2[m]=r;
mat2[m+1]=c;
mat2[m+2]= mat[i-r_leng];
m+=3; i++;
}
else i++;
}
}
return mat2;
}
이 코드는 정상동작함.
근데 어째서 mat[i]가 아니라 mat[i-r_leng] (행의 길이를 뺀 것)이어야 정상 동작을 하는지 모르겠음.. 저거 고치면 바로 행의 길이만큼 밀린 값 나오다가 쓰레기값 토해냄.
코드만 보면 지적한대로 이상함. 어쩌면 애초에 인자로 넘어온 mat라는 배열에 저장하는 부분에서부터 틀어져 있을지도 모름.