느낀점 ¶
문제는 쉬운데 이걸 함수로 나누기가 무지 애매하다 -_-;
문제는 금방풀고; 이 프로그래밍 함수 어떻게 나눌지 생각한게 한시간 걸렸을듯...
문제는 금방풀고; 이 프로그래밍 함수 어떻게 나눌지 생각한게 한시간 걸렸을듯...
일단 리팩토링 전 소스만 올렸다;
- 추가: 리팩토링(?) 한거같지도 않지만-_- 일단 나눠봤다; 행렬에서 transpose를 이용해서;;; 일단 짜보았는데 효율적이진 않은듯
리팩토링 前 소스 ¶
~cpp #include <stdio.h> #define ROW 4 #define COL 4 void prt_array(int value[ROW][COL]); int main(int argc, char* argv[]) { //int value[4][4]={ {1,2,3}, {3,4,5}, {4,5,6}}; int max; int i,j; int value[ROW][COL]; //전체 4 * 4 행렬의 공간 중 3 * 3 행렬의 공간에 키보드로 입력을 받아 숫자를 저장한 후, for(i=0;i<ROW-1;i++){ for(j=0;j<COL-1;j++){ scanf("%d",&value[i][j]); } } //행렬[i][3]에는 각 행 중 가장 큰 수를 찾아 저장하고, for(i=0;i<ROW-1;++i){ max=0; for(j=0;j<COL-1;++j){ if(max < value[i][j]) max = value[i][j]; } value[i][3] = max; } //행렬[3][j]에는 각 열 중 가장 큰 수를 찾아 저장하고, for(j=0;j<COL-1;++j){ max = 0; for(i=0;i<ROW-1;++i){ if(max < value[i][j]) max = value[i][j]; } value[3][j] = max; } //행렬[3][3]에는 전체 중 가장 큰 수를 찾아 저장한 다음, max=0; for(i=0;i<ROW-1;++i) if(max < value[i][3]) max=value[i][3]; for(i=0;i<COL-1;++i) if(max < value[3][i]) max=value[3][i]; value[3][3] = max; //이들을 깔끔하게 출력하는 프로그램을 작성하여라. prt_array(value); return 0; } ////////////////////////////////////////////////////////////////////////// //// Functions /////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// void prt_array(int value[ROW][COL]) { int i=ROW,j=COL; for(i=0;i<ROW;++i) { for(j=0;j<COL;++j) { printf("%d ",value[i][j]); } printf("\n"); } }
리팩토링 後 소스 ¶
~cpp #include <stdio.h> #define ROW 4 #define COL 4 #define DEBUG void prt_array(int value[ROW][COL]); //행렬 출력 void swap(int* x,int* y); //두 파라미터를 바꾸기 void transpose(int (*value)[COL]); //행렬의 diagonal을 기준으로 transpose void findmax_row(int (*value)[COL]); //한 행의 최대값을 마지막 열에 넣기 int main(int argc, char* argv[]) { int max; int i; #ifdef DEBUG int value[ROW][COL]={{1,2,3},{3,4,5},{4,5,6}}; #else int value[ROW][COL]; //전체 4 * 4 행렬의 공간 중 3 * 3 행렬의 공간에 키보드로 입력을 받아 숫자를 저장한 후, for(i=0;i<ROW-1;i++){ for(j=0;j<COL-1;j++){ scanf("%d",&value[i][j]); } } #endif //DEBUG //행렬[i][3]에는 각 행 중 가장 큰 수를 찾아 저장하고, findmax_row(value); transpose(value); //행렬[3][j]에는 각 열 중 가장 큰 수를 찾아 저장하고, findmax_row(value); transpose(value); //행렬[3][3]에는 전체 중 가장 큰 수를 찾아 저장한 다음, max=0; for(i=0;i<ROW-1;++i) if(max < value[i][3]) max=value[i][3]; for(i=0;i<COL-1;++i) if(max < value[3][i]) max=value[3][i]; value[3][3] = max; //이들을 깔끔하게 출력하는 프로그램을 작성하여라. prt_array(value); return 0; } ////////////////////////////////////////////////////////////////////////// //// Functions /////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// void prt_array(int value[ROW][COL]) { int i=ROW,j=COL; for(i=0;i<ROW;++i){ for(j=0;j<COL;++j){ printf("%d ",value[i][j]); } printf("\n"); } } void findmax_row(int (*value)[COL]) { int i,j,max; for(j=0;j<ROW-1;++j){ max=0; for(i=0;i<COL-1;++i){ if(max < value[j][i]) max = value[j][i]; } value[j][3] = max; } } void transpose(int (*value)[COL]) { int i,j; for(i=0;i<ROW;++i) { for(j=1+i;j<COL;++j){ swap(&value[i][j],&value[j][i]); } } } void swap(int* x,int* y) { int tmp; tmp = *x; *x = *y; *y = tmp; }