728x90
1. 문제
https://www.acmicpc.net/problem/2447
2. 접근
크기가 N인 패턴은 N*N 정사각형 모양이다. 크기가 3인 패턴은 가운데 공백이 있고 모든 칸에 *이 있다.
***
* *
***
크기가 6일 때는
*********
* ** ** *
*********
*** ***
* * * *
*** ***
*********
* ** ** *
*********
위와 같은 모습이다.
가장 왼쪽 위부터 (0,0)이라고 할 때,
(1,1) (4,1) (7,1)
(4,3) (5,3) (6,3)
(1,4) (3,4) (4,4) (5,4)
(1,7) (4,7) (7,7)
의 좌표들이 모두 공백이다.
규칙을 생각해보면, x % 3 == 1 이고 y % 3 == 1이면서, (x or y) / 6 == 1 이다.
따라서 공백인 경우의 조건문을 작성해보면,
if ((x/n) % 3 ==1 && (y/n) % 3 == 1)
별을 찍는 함수는 다음과 같다.
void Star(int x, int y, int n) {
if ((x / n) % 3 == 1 && (y / n) % 3 == 1) // 공백
printf(" ");
else { // 별 출력
if (n / 3 == 0) printf("*");
else Star(x, y, n / 3);
}
}
조건문이 성립할 때 공백을 출력하고, 그게 아니라면 n이 3보다 크면 별을 출력, 작으면 다시 함수를 호출한다.
3. 문제풀이
#include <stdio.h>
int n, x, y;
void Star(int x, int y, int n) {
if ((x / n) % 3 == 1 && (y / n) % 3 == 1)
printf(" ");
else {
if (n / 3 == 0) printf("*");
else Star(x, y, n / 3);
}
}
int main(void) {
scanf_s("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
Star(i, j, n);
}
printf("\n");
}
}
참고
728x90
'PS > BOJ' 카테고리의 다른 글
[Python] 백준 17219 : 비밀번호 찾기 (0) | 2022.06.07 |
---|---|
[C] 백준 11729 : 하노이 탑 이동 순서 (0) | 2022.05.29 |
[C] 백준 1550 : 16진수(feat.자료형) (0) | 2022.05.26 |
[C] 백준 2960 : 에라토스테네스의 체 (0) | 2022.05.24 |
[C] 백준 5622 : 다이얼 (0) | 2022.05.24 |