문제
삼각형의 높이 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 |