C

열혈c - 도전!프로그래밍3, 도전2 달팽이배열

돌맹이시터 2020. 10. 12. 01:11

 

윤성우의 열혈 C 프로그래밍

 

 

도전! 프로그래밍3,

도전2

사용자로부터 n을 입력받아, n*n 길이에 해당하는 배열을

달팽이 형태로 생성, 출력하는 프로그램을 작성합니다. 

 

 

다른 헤더를 사용하지 않고, stdio.h만 이용하여 만들어 본 코드를 공유해보려 합니다.

 

 

 

저는 1부터 시작해서,

숫자 순서대로, 시계방향대로 입력하는 형태로 만들어보았는데요

가장자리부터 시작해서, 점차적으로 안으로 사각형을 그리면서(?) ..

아래 그림과 같이

 

 

start지점부터 end 지점까지 입력해나가는 형식으로 프로그램을 작성해보았습니다.

 

 

기본적인 프레임은

1,2,3,4 의 순서대로 반복하면서 사각형을 점점 안으로 좁혀서 그리는 형태로

수를 입력합니다.

 

 

풀이와 함께 보여드리겠습니다.

 

 

 

#include <stdio.h>

 

int main(void)

{

 int num;

 printf("enter num: ");

 scanf("%d", &num);  --------- 숫자를 입력받아서, num에 저장합니다.

 

 int arr[num][num]; --------- 입력받은 숫자 num * num 배열을 만들고,

 

 int i,j,k=0; --------- 사용될 변수들을 초기화해줍니다.

 int n=1; ----------- 배열의 각 위치에 입력될 숫자를 n으로 정의하고, 1부터 입력하기 위해 1으로 초기화합니다.

 

 for (; n<=(num*num); k++) --------- n이 num*num에 도달하게 되면 loop가 멈춥니다. 다시말해, 모든 배열에 수를 입력하면 루프가 끝나게 됩니다.

  {

  for (i=k, j=k; j<num-k; j++, n++) ------- 위의 그림에서 사각형의 1번 라인을 따라 배열을 입력합니다.

   arr[i][j]=n;

  for (i=k+1, j=num-1-k; i<num-k; i++, n++) ------- 2번 라인을 따라 배열을 입력합니다.

   arr[i][j]=n;

  for (i=num-1-k, j=num-2-k; j>=k; j--, n++) ------ 3번 라인을 따라 배열을 입력합니다.

   arr[i][j]=n;

  for (i=num-2-k, j=k; i>k; i--, n++) -------- 4번 라인을 따라 배열을 입력합니다.

   arr[i][j]=n;

  }

 

 for (i=0; i<num; i++)  ------- 완성된 배열을 출력합니다.

 {

  for (j=0; j<num; j++)

   printf("%d", arr[i][j]);

  printf("\n");

 }

return 0;

}