변경이력

돌아가기
2 1개 문자 추가 9개 문자 삭제

2015/10/07 21:24

jace

```{.cpp} #include<stdio.h> int main(){ int x=100, y=90, x_=0, y_=0; // x, y : 사용자 입력(행,렬) // x_,y_ 결과표시를 위한 임시저장 변수 int a=0, b=0, c=0, i=0, j=0; // a, b : 각각 행,열 좌표조정을 위한 변수 // c : 테두리 직선의 count 수 // i, j : 반복문을 위한 임시변수 int current = 0; // 대입할 값 int **arr; scanf("%d %d", &x, &y); x_ = x; y_ = y; arr = (int**) malloc (sizeof(int*)*x); for(int i=0; i<x; i++) arr[i] = =(int*) malloc (sizeof(int)*y); // a, b의 증가또는 감소로 arr의 인덱스(좌표 a,b) 방향을 조절하고 // 하나의 라인이 끝날 때마다 x_, y_ 값을 점점 줄여나가면서 // 나선방향으로 차례대로 값을 대입한다. for(c=1; current<x*y; c++){ int temp = (c/2)%2; // temp : arr의 인덱스를 표시하는 a 또는 b의 증감(방향)을 판별하기위한 변수 // 행의 경우 temp의 값이 1인경우 a가 증가하는방향, 아닌경우 감소하는 방향 // 열의 경우 temp의 값이 0인경우 b가 증가하는방향, 아닌경우 감소하는 방향 // 행, 열, 행, 열 순서대로 대입하므로 // 하나의 라인을 count하는 c가 홀수인경우 열, 짝수인경우 행 if(c%2 == 1){ // 열 for(i=0; i<y_; i++){ if(i != 0){ if(temp == 0) b++; else b--; } //printf("(%d, %d) = %d\n", a, b, current); arr[a][b] = current; current++; } y_--; } else{ // 행 for(i=0; i<x_-1; i++){ if(temp == 1) a++; else a--; //printf("(%d, %d) = %d\n", a, b, current); arr[a][b] = current; current++; } if(temp == 0) b++; else b--; x_--; } } for(i=0; i<x; i++){ for(j=0; j<y; j++) printf("%d ", arr[i][j]); printf("\n"); } return 0; } ``` C언어로 작성. 풀이방법은 주석참고.
```{.cpp} #include<stdio.h> int main(){ int x=100, y=90, x_=0, y_=0; // x, y : 사용자 입력(행,렬) // x_,y_ 결과표시를 위한 임시저장 변수 int a=0, b=0, c=0, i=0, j=0; // a, b : 각각 행,열 좌표조정을 위한 변수 // c : 테두리 직선의 count 수 // i, j : 반복문을 위한 임시변수 int current = 0; // 대입할 값 int **arr; scanf("%d %d", &x, &y); x_ = x; y_ = y; arr = (int**) malloc (sizeof(int*)*x); for(int i=0; i<x; i++) arr[i] = =(int*) malloc (sizeof(int)*y); // a, b의 증가또는 감소로 arr의 인덱스(좌표 a,b) 방향을 조절하고 // 하나의 라인이 끝날 때마다 x_, y_ 값을 점점 줄여나가면서 // 나선방향으로 차례대로 값을 대입한다. for(c=1; current<x*y; c++){ int temp = (c/2)%2; // temp : arr의 인덱스를 표시하는 a 또는 b의 증감(방향)을 판별하기위한 변수 // 행의 경우 temp의 값이 1인경우 a가 증가하는방향, 아닌경우 감소하는 방향 // 열의 경우 temp의 값이 0인경우 b가 증가하는방향, 아닌경우 감소하는 방향 // 행, 열, 행, 열 순서대로 대입하므로 // 하나의 라인을 count하는 c가 홀수인경우 열, 짝수인경우 행 if(c%2 == 1){ // 열 for(i=0; i<y_; i++){ if(i != 0){ if(temp == 0) b++; else b--; } //printf("(%d, %d) = %d\n", a, b, current); arr[a][b] = current; current++; } y_--; } else{ // 행 for(i=0; i<x_-1; i++){ if(temp == 1) a++; else a--; //printf("(%d, %d) = %d\n", a, b, current); arr[a][b] = current; current++; } if(temp == 0) b++; else b--; x_--; } } for(i=0; i<x; i++){ for(j=0; j<y; j++) printf("%d ", arr[i][j]); printf("\n"); } return 0; } ``` C언어로 작성. 풀이방법은 주석참고.
1 Original

2015/10/07 21:21

jace

코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.