본문 바로가기

카테고리 없음

[C언어] 달팽이 배열 만들기

#define xx	4
#define yy	5

void main()
{
	int arr[yy][xx] = {0};
	int su = 1, to[2] = {0};
	int cnt;
	int x = 0, y = 0;
	
	for(cnt = 0; cnt < (xx * yy); cnt++)
	{
		arr[y][x] = cnt + 1;
		if((to[0] == 0) && (to[1] == 0))	// x방향 증가
		{
			x++;
			if((x == xx) || (arr[y][x] != 0))
			{
				x--;
				cnt--;
				to[0] = 1;
				to[1] = 0;
			}
		}
		else if((to[0] == 1) && (to[1] == 0))	// y방향 증가
		{
			y++;
			if((y == yy) || (arr[y][x] != 0))
			{
				y--;
				cnt--;
				to[0] = 0;
				to[1] = 1;
			}
		}
		else if((to[0] == 0) && (to[1] == 1))	// x방향 감소
		{
			x--;
			if((x == -1) || (arr[y][x] != 0))
			{
				x++;
				y--;
				to[0] = 1;
				to[1] = 1;
			}
		}
		else if((to[0] == 1) && (to[1] == 1))	// y방향 감소
		{
			y--;
			if(arr[y][x] != 0)
			{
				y++;
				x++;
				to[0] = 0;
				to[1] = 0;
			}
		}
	}

	for(cnt = 0; cnt < (xx * yy); cnt++)
	{
		x = cnt % xx;
		y = cnt / xx;
		if(((cnt % xx) == 0) && (cnt != 0))printf("\n");
		printf("%d\t", arr[y][x]);
	}
	printf("\n");
}

프로그램 실행화면


달팽이 배열을 만드는 프로그램이다. 생각보다 조금 복잡하다. 큰 틀로 봤을 때, [x방향 증가] [y방향 증가] [x방향 감소] [y방향 감소] 이 순서가 계속해서 반복된다.


방향과 증감을 to[2]배열로 관리를 했지만 사실은 변수 하나를 선언해 0 1 2 3 을 반복해 나가면서 실행하도 상관은 없지만 조금 있어보이기도 하고 명확히 하기 위해서 to[2]배열을 선언해 사용하였다.


프로그램 제일 상단에 있는 #define을 통해 배열의 크기를 조절할 수 있다. for문의 구현 내용은 x, y 증감에 관한 if문만 잘 살펴보면 쉽게 이해되리라 생각된다.