문제
마름모의 한 변의 길이 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 |