* 문제

 

문제

재귀적인 패턴으로 별을 찍어 보자. 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

+ Recent posts