문제 URL:
https://www.acmicpc.net/problem/2447
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
위 문제는 재귀적인 패턴으로 별을 찍는 문제로 3의 거듭제곱으로 N이 주어졌을 때 패턴에 따라 별을 출력해야 한다.
N = 3일때 패턴 중 비어있는 공간의 규칙을 찾아보면 행과 열이 3으로 나누었을 때 1이 남는다는 규칙이 보인다.
위 규칙을 토대로 N이 9 이상일 때를 살펴보면 비어있는 공간이 3x3의 모형을 띄게 된다.
따라서 (i / 3) % 3 == 1 && (j / 3 ) % 3 == 1의 조건을 만족시키면 된다.
N이 주어졌을 때 N을 3으로 나눠가면서 재귀 호출로 점점 작은 단위를 검사해야 한다.
#include <iostream>
using namespace std;
void printStar(int i, int j, int num){
if((i / num)%3 == 1 && (j / num)%3 == 1){
cout << ' ';
}else{
if(num / 3 == 0)
cout <<'*';
else
printStar(i,j,num/3);
}
}
int main(){
int num;
cin >> num;
for(int i = 0; i < num; i++){
for(int j = 0; j < num; j++)
printStar(i,j,num);
cout << '\n';
}
}