문제

마름모의 한 변의 길이 N을 입력받아 아래와 같이 문자마름모를 출력하는 프로그램을 작성하시오.

 

< 처리조건 >
(1) 첫 번째 행의 중앙부터 출발하여 시계 반대방향으로 'A'부터 차례대로 채워나간다. ('Z'다음에는 다시 'A'가 된다.)
(2) 바깥 부분이 다 채워지면 두 번째 행 중앙부터 다시 같은 작업을 반복한다.
(3) 같은 방법으로 마름모를 다 채워지도록 하여 출력한다.

 


 

 



 

입력형식

마름모의 한변의 길이 N(N의 범위는 100 이하의 양의 정수)을 입력받는다.

 

출력형식

주어진 형태대로 한변의 길이가 N인 문자마름모를 출력한다. 문자 사이는 한 개의 공백으로 구분한다. 주의 : 출력시 널문자('NULL', '\0')는 출력되지 않게 하세요..

 

<코드>

#include <stdio.h>

void check(char *c)
{
	if(*c > 'Z')
		*c = 'A';
}

int main()
{
	int n, x, y, len;
	char arr[200][200];
	char c = 'A';
	
	scanf("%d", &n);
	
	if(n<1||n>100)
	{
		printf("INPUT ERROR!");
		return 0;
	}
	
	for(int i=0; i<n*2-1; i++)
	{
		for(int j=0; j<n*2-1; j++)
			arr[i][j] = ' ';
	}
	
	x = n-1;
	y = 0;
	len = n-1;
	
	while(1)
	{
		//LEFTDOWN
		for(int i=0; i<len; i++)
		{
			arr[y][x] = c++;
			check(&c);
			x--;
			y++;
		}
		
		//RIGHTDOWN
		for(int i=0; i<len; i++)
		{
			arr[y][x] = c++;
			check(&c);
			x++;
			y++;
		}
		
		//RIGHTUP
		for(int i=0; i<len; i++)
		{
			arr[y][x] = c++;
			check(&c);
			x++;
			y--;
		}
		
		//LEFTUP
		for(int i=0; i<len; i++)
		{
			arr[y][x] = c++;
			check(&c);
			x--;
			y--;
		}
		
		y++;
		len--;
		
		if(!len)
		{
			arr[y][x] = c++;
			break;
		}
	}
	
	for(int i=0; i<n*2-1; i++)
	{
		for(int j=0; j<n*2-1; j++)
			printf("%c ", arr[i][j]);
		printf("\n");
	}
	
	return 0;
}

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

2074 : 홀수 마방진  (0) 2020.05.19
1495 : 대각선 지그재그  (0) 2020.05.12
1707 : 달팽이사각형  (0) 2020.05.12
2071 : 파스칼 삼각형  (0) 2020.05.07
1337 : 달팽이삼각형  (0) 2020.05.07

+ Recent posts