문제 링크
접근
처음에는 단순히 별을 print 하려고 생각했으나 계속 실패하자 나에게 익숙한 2차원 공백 배열에 원소를 집어 넣는 방식으로 해결했다.
27 * 27 사각형을 9개로 쪼개 봤을 때, 가운데만 비어 있으므로 이걸 그대로 코드로 옮겨 주었다.
재귀 함수
void PrintStars(int n, int x, int y)
base condition
n을 계속 3으로 나누다가 1이 되면 별을 찍기로 했다.
재귀 식
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (i == 1 && j == 1)
continue;
PrintStars(n / 3, x + n / 3 * i, y + n / 3 * j);
}
}
x, y 좌표를 3의 배수씩 옮겨 다시 별을 찍도록 했다. 이때 n * n 사각형 기준 가운데가 비어있기 때문에 조건식을 추가하여 건너뛰게 만들었다.
전체 코드
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
int N;
char stars[2222][2222];
void PrintStars(int n, int x, int y)
{
if (n == 1)
{
stars[x][y] = '*';
return;
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (i == 1 && j == 1)
continue;
PrintStars(n / 3, x + n / 3 * i, y + n / 3 * j);
}
}
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
fill(stars[i], stars[i] + n, ' ');
PrintStars(n, 0, 0);
for (int i = 0; i < n; i++)
cout << stars[i] << '\n';
return 0;
}
결과
'알고리즘' 카테고리의 다른 글
[C++] Boj 9663 N-Queen (0) | 2025.01.16 |
---|---|
[C++] Boj 15649 N과 M (1) (1) | 2025.01.15 |
[C++] Boj 1992 쿼드트리 (0) | 2025.01.13 |
[C++] Boj 1780 종이의 개수 (0) | 2025.01.10 |
[C++] Boj 17478 재귀함수가 뭔가요? (0) | 2025.01.09 |