다음과 같은 n*m 배열 구조를 출력해보자.

입력이 3 4인 경우 다음과 같이 출력한다.

1 2 3 4

10 11 12 5

9 8 7 6

입력이 4 5인 경우는 다음과 같이 출력한다.

1 2 3 4 5

14 15 16 17 6

13 20 19 18 7

12 11 10 9 8

입력이 n m인 경우의 2차원 배열을 출력해보자.

입력

첫 번째 줄에 배열의 크기 n m이 입력된다.

[입력값의 정의역]

1<=  n,m <= 100

출력

n*m 크기의 배열을 설명과 같이 채워 출력한다.

#include <stdio.h>

int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  int x = 1, y = 1;
  int array[101][101] = {
      0,
  };
  int banghyang = 0; // 0우 1좌 2위 3아래
  for (int i = 1; i <= n * m; i++) {
    array[y][x] = i;
    if (banghyang == 0) {
      if (x + 1 > m || array[y][x + 1] != 0) {
        banghyang = 3;
        y++;
      } else {
        x++;
      }
    } else if (banghyang == 1) {
      if (x - 1 < 1 || array[y][x - 1] != 0) {
        banghyang = 2;
        y--;
      } else {
        x--;
      }
    } else if (banghyang == 2) {
      if (y - 1 < 1 || array[y - 1][x] != 0) {
        banghyang = 0;
        x++;
      } else {
        y--;
      }
    } else if (banghyang == 3) {
      if (y + 1 > n || array[y + 1][x] != 0) {
        banghyang = 1;
        x--;
      } else {
        y++;
      }
    }
  }

  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      printf("%d ", array[i][j]);
    }
    printf("\\n");
  }
}

정수 banghyang 변수가 0일 경우 오른쪽으로 이동, 1일 경우 왼쪽으로 이동, 2일 경우 위로 이동, 3일 경우 아래로 이동합니다.