-
JUNGOL...49일지 2021. 3. 15. 12:40
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
GHint!
<생각하기>
출발위치는 (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)