IT_Programming/C · C++

[C] 배열 대각선 모양으로 숫자 넣기

JJun ™ 2009. 6. 5. 01:47

귀찮아서 대충 짜봤다~

( 정보 처리 기사 실기 알고리즘 문제집에서 본 기억이... 아님 말고~ )

 

=============================================================================================

 

[실행화면]

 

=============================================================================================

 

[소스코드]

 

#include <stdio.h>
#include <stdlib.h>

 

int main(void)
{
       int i, j, size, temp, count, num = 0;
       int  **arr; 
 
       printf("배열의 사이즈를 입력하세요 : ");
       scanf("%d", &size);
 
       // 동적 메모리 생성
       arr = (int **)malloc(sizeof(int *) * size);
       for(i=0; i<size; ++i)
       {
              *(arr + i) = (int *)malloc(sizeof(int) * size);
       }

 

       // 연산 (값 대입)
       i = j = count = 0;
       while(1)
       {
              if(num == size*size)
                    break;
  
              arr[i++][j--] = ++num;
  
              if((i>size-1) || (j<0))  // 범위를 벗어날 경우
              {
                     if(count < size-1) // ex :  5 입력 후 (0,0), (0,1), (0,2), (0,3), (0,4)
                     {
                            j = i;
                            i = 0;
                            count++;      // 카운팅 (연산의 경계)
                     }
                     else                  // 대각선 정점 찍고 내려오는 부분 (1,4), (2, 4), (3, 4), (4,4)
                     {
                            temp = i;
                            i = j+2;
                            j = temp-1;
                     }
              }
       }

 

       for(i=0; i<size; ++i)     // 출력
       {
              for(j=0; j<size; ++j)
              {
                     printf("%5d", *(*(arr + i) + j));
              }
              printf("\n");
       }
  
       // 동적 메모리 해제
       for(i=0; i<size; ++i)
              free(*(arr + i));

      

       free(arr);

 

       return 0;
}

 

=============================================================================================