SW Study/윤성우 C 프로그래밍

도전! 프로그래밍3. 도전 2

슈도코드 2019. 10. 1. 23:05
#include<stdio.h>

void Snail(int (*arr)[100], int num)
{
   int i = 0, j = 0;
   int x = 0, y = 0;  //가로 세로
   int count = 1, turn = 0, limit = num; //숫자 세기, 방향, 출력 범위
   int sign = 1; //부호 변환

   while (count < (num*num)) //n x n 영역
   {
      for (i = 1; i < limit; i++)  //가로 출력
      {
         arr[x][y] = count;
         y = y + 1 * sign;
         count++;
      }
      turn++;

      if (count >= (num*num)) //출력 범위 초과시 탈출
         break;

      for (j = 1; j < limit; j++) //세로 출력
      {
         arr[x][y] = count;
         x = x + 1 * sign;
         count++;
      }

      sign = sign*(-1); //부호 변환
      turn++;

      if (turn % 4 == 0) //한 바퀴 돌 때마다 양 쪽 부분 잘라냄
      {
         limit = limit - 2;
         x++;
         y++;
      }
   }
   arr[x][y] = count; //마지막 값
}

void ShowArr(int(*arr)[100], int num)  //배열 출력
{
   int i, j;
   for (i = 0; i < num; i++)
   {
      for (j = 0; j < num; j++)
         printf("%3d ", arr[i][j]);
      printf("\n");
   }
}

int main(void)
{   
   int num;
   int arr[100][100] = { 0 };
   printf("num: ");
   scanf("%d", &num);
   
   Snail(arr, num);
   ShowArr(arr, num);
   return 0;
}