문제

정사각형의 크기를 입력 받은 후 시계방향으로 돌면서 다음과 같은 형태로 출력하는 프로그램을 작성하시오.

 

< 처리조건 >
(1) 가장 왼쪽 위의 좌표부터 차례로 숫자를 대입시킨다.
(2) 오른쪽으로 채워 나가다가 끝이면 다시 아래 → 왼쪽 → 위 →오른쪽의 순으로 모두 채워질때까지 반복한다.

 

 

 

 

 

 

입력형식

정사각형의 크기 n(1부터 100사이의 정수)을 입력받는다.

 

출력형식

위에서 언급한 형태로 정사각형의 내부 숫자를 차례로 채운 후의 모습을 출력한다. 숫자 사이는 공백으로 구분한다.

 

<코드>

#include <stdio.h>

enum direction{
	RIGHT,
	DOWN,
	LEFT,
	UP
};

int main()
{
	int n, num=1;
	int x=1, y=0;
	int arr[100][100] = {0, };
	int direction = RIGHT;
	
	scanf("%d", &n);
	
	if(n<1||n>100)
	{
		printf("INPUT ERROR!");
		return 0;
	}
	
	while(1)
	{
		switch(direction)
		{
			case RIGHT:
				arr[y][x] = num++;
				if(x==n||arr[y][x+1])
				{
					y++;
					direction = DOWN;
				}
				else
					x++;
				break;
			
			case DOWN:
				arr[y][x] = num++;
				if(y==n-1||arr[y+1][x])
				{
					x--;
					direction = LEFT;
				}
				else
					y++;
				break;
				
			case LEFT:
				arr[y][x] = num++;
				if(x==1||arr[y][x-1])
				{
					y--;
					direction = UP;
				}
				else
					x--;
				break;
				
			case UP:
				arr[y][x] = num++;
				if(arr[y-1][x])
				{
					x++;
					direction = RIGHT;
				}
				else
					y--;
				break;
		}
		
		if(arr[y][x])
			break;
	}
	
	for(int i=0; i<n; i++)
	{
		for(int j=1; j<=n; j++)
			printf("%d ", arr[i][j]);
		printf("\n");
	}
	
	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

1495 : 대각선 지그재그  (0) 2020.05.12
1331 : 문자마름모  (0) 2020.05.12
2071 : 파스칼 삼각형  (0) 2020.05.07
1337 : 달팽이삼각형  (0) 2020.05.07
1641 : 숫자삼각형  (0) 2020.05.07

+ Recent posts