접근방법
기본적으로 입력 N 사이즈만큼 문양이 찍힌다는것을 알아야한다.
즉 N==27이면 가로27, 세로27 사이즈의 문양이 찍힌다.
N회 반복의 for문을 두 번 중첩하고, 개행문자를 찍어줘야 하는것이 문제의 출발점이다.
별 찍는 함수에는 좌표와 입력값 N을 같이 넘긴다.
함수에서는 divide-and-conquer 방법을 사용하여 별을 찍을지, 말지를 결정한다.
n==1일 때까지 재귀호출을 하며 %3 연산을 취했을 때 i와 j가 1이 되는 경우에만 공백을 찍고,
이 조건에 걸리지 않았을 경우인데 n==1일 경우에는 별을 찍고 끝낸다.
소스코드
#include<cstdio>
void recur(int i, int j, int n) {
if((i/n)%3==1 && (j/n)%3==1) // 이 조건에 해당하는 부분을 모두 차례로 제하는 방식
printf(" ");
else if(n/3==0) // 문제를 n==1까지 쪼갰는데도 if조건에 걸리지 않으면 별을 찍는다.
printf("*");
else
recur(i,j,n/3); // n이 3이상인데 조건에 걸리지 않았다? 다시 호출
}
int main() {
int n;
scanf("%d", &n);
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++)
recur(i,j,n); // n x n개의 포인트를 모두 호출
printf("\n"); // 줄 끝날때마다 개행
}
}
'Algorithm' 카테고리의 다른 글
[백준 10815] 이분 탐색법(binary search) (0) | 2022.06.24 |
---|---|
[백준 2609] 최대공약수와 최소공배수 (0) | 2022.06.21 |
[백준 20353] C언어 기본 자료형 정리 (0) | 2022.06.16 |
[백준 11729] 하노이 탑 옮기기(재귀) 문제해석 / 풀이 / 코드 (0) | 2022.06.15 |
[백준 4948] 베르트랑 공준(소수 구하기) 이해하기 / 코드 (0) | 2022.06.13 |
댓글