JUNGOL...49
Beginner_Coder/도형만들기2/문자마름모
문제
마름모의 한 변의 길이 N을 입력 받아 아래와 같이 문자 마름모를 출력하는 프로그램을 작성하시오.
< 처리조건 >
(1) 첫 번째 행의 중앙부터 출발하여 시계 반대 방향으로 'A' 부터 차례대로 채워나간다. ('Z'다음에는 다시 'A'가 된다.)
(2) 바깥 부분이 다 채워지면 두 번째 행 중앙부터 다시 같은 작업을 반복한다.
(3) 같은 방법으로 마름모를 다 채워지도록 하여 출력한다.
입력 형식
마름모의 한변의 길이 N(N의 범위는 100 이하의 양의 정수)을 입력받는다.
출력 형식
주어진 형태대로 한 변의 길이가 N인 문자 마름모를 출력한다. 문자 사이는 한 개의 공백으로 구분한다.
주의 : 출력 시 널 문자('NULL', '\0')는 출력 되지 않게 하세요..
입력 예
4
출력 예
A
B M L
C N U T K
D O V Y X S J
E P W R I
F Q H
G
Hint!
<생각하기>
출발위치는 (1, N) 배열에 문자를 넣고 N-1번씩 ↙ ↘ ↗ ↖ 방향으로 이동한 후 아래로 이동 같은 방법으로 N-2번, N-3번, ...1번까지 반복
CharacterRhombus.h
#include <iostream>
class CharacterRhombus : public Base
{
private:
char GetCh();
}
CharacterRhombus.cpp
void CharacterRhombus::Code()
{
int n;
std::cin >> n;
int width{ n * 2 - 1 };
char** arr = new char*[width];
for (int i = 0; i < width; i++)
{
arr[i] = new char[width];
std::fill_n(arr[i], width, ' ');
}
int minLimit{ 0 }, maxLimit{ width };
int i{ 0 }, j{ n - 1 };
while (true)
{
while (true)
{
if (j < minLimit || arr[i][j] != ' ')
{
j += 2;
break;
}
arr[i++][j--] = GetCh();
}
while (true)
{
if (i >= maxLimit || arr[i][j] != ' ')
{
i -= 2;
break;
}
arr[i++][j++] = GetCh();
}
while (true)
{
if (j >= maxLimit || arr[i][j] != ' ')
{
j -= 2;
break;
}
arr[i--][j++] = GetCh();
}
while (true)
{
if (i < minLimit || arr[i][j] != ' ')
{
i += 1;
break;
}
arr[i--][j--] = GetCh();
}
minLimit++;
maxLimit--;
if (i == n - 1 && i == j)
{
arr[i][j] = GetCh();
break;
}
}
for (int i = 0; i < width; i++)
{
for (int j = 0; j < width; j++)
{
std::cout << arr[i][j] << ' ';
}
std::cout << '\n';
}
}
char CharacterRhombus::GetCh()
{
static char ch{ 'A' };
if (ch > 'Z')
{
ch = 'A';
}
return ch++;
}
NadanKim/CodingTest_JUNGOL: JUNGOL 코딩 테스트를 위한 저장소 (github.com)
NadanKim/CodingTest_JUNGOL
JUNGOL 코딩 테스트를 위한 저장소. Contribute to NadanKim/CodingTest_JUNGOL development by creating an account on GitHub.
github.com