* 문제
문제
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.
크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.
***
* *
***
N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.
입력
첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k < 8이다.
출력
첫째 줄부터 N번째 줄까지 별을 출력한다.
* 접근 방식
- 총 8개의 모듈과 하나의 빈 공간으로 이루어져 있다.
- 한 모듈을 구하기 위해 재귀호출을 통해 서브 모듈을 구하고 서브 모듈을 구하기 위해 그 아랫 단계의 모듈을 구하는 식으로 구현하였다.
#include <iostream>
#include <vector>
using namespace std;
void CalcStar(int partitionSize, vector<string>& output)
{
if (1 == partitionSize)
{
output.push_back("*");
return;
}
int subpartitionSize = partitionSize / 3;
vector<string> prev;
CalcStar(subpartitionSize, prev);
string spaceString(subpartitionSize, ' ');
output.resize(partitionSize);
for (int i = 0; i < partitionSize; ++i)
{
for (int j = 0; j < 3; ++j)
{
if (1 == j && 1 == i / subpartitionSize)
{
output[i].append(spaceString);
}
else
{
output[i].append(prev[i % subpartitionSize]);
}
}
}
}
int main(void)
{
int n = 0;
cin >> n;
vector<string> output;
CalcStar(n, output);
for (auto line : output)
{
cout << line << endl;
}
return 0;
}
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
[11651번] 좌표 정렬하기 2 (0) | 2022.04.10 |
---|---|
[2751번] 수 정렬하기 2 (0) | 2022.04.10 |
[1074번] Z (0) | 2022.04.09 |
[2263번] 트리의 순회 (0) | 2022.04.09 |
[11729번] 하노이 탑 이동 순서 (0) | 2022.04.09 |