문제

삼각형의 높이 N을 입력받아서 아래와 같이 숫자 0부터 달팽이 모양으로 차례대로 채워진 삼각형을 출력하는 프로그램을 작성하시오.

 

< 처리조건 >
왼쪽 위부터 시계방향으로 오른쪽 아래로 이동하면서 숫자 0부터 N개를 채우고 

다시 왼쪽으로, 다음은 위쪽으로 반복하면서 채워 나간다. (숫자 9 다음에는 0부터 다시 시작한다.)

 

 

 

 

입력형식

삼각형의 한변의 길이 N(N의 범위는 100 이하의 양의 정수)을 입력받는다.

 

출력형식

주어진 형태대로 높이가 N인 달팽이 삼각형을 출력한다. 숫자 사이는 한 개의 공백으로 구분한다.

 

<코드>

#include <stdio.h>
#include <string.h>

enum direction{
	DIAGONAL,
	LEFT,
	UP,
};

int main()
{
	int n, x=0, y=0;
	int direction = DIAGONAL;
	int num=0;
	int arr[100][100] = {0};
	
	scanf("%d", &n);

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

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

1707 : 달팽이사각형  (0) 2020.05.12
2071 : 파스칼 삼각형  (0) 2020.05.07
1641 : 숫자삼각형  (0) 2020.05.07
1329 : 별삼각형3  (0) 2020.05.06
1719 : 별삼각형2  (0) 2020.05.06

+ Recent posts