풀이
좌표를 이용해 문제를 해결하기로 했다.
- N = 9일 때, N(9)/3의 패턴으로 둘러싸인 공백의 좌표는 (3, 3), (3, 4), (3, 5), (4, 3), (4, 4), (4, 5), (5, 3), (5, 4), (5, 5)이다. 이 좌표들은 N(9)/3으로 나누면, 1.xx인 점을 이용해 공백을 찍으면 된다.
- N(9)/3의 패턴 속의 공백들의 좌표는 (1, 1), (1, 4), (1, 7), (4, 1),
(4, 4),(4, 7), (7, 1), (7, 4), (7, 7)이다. 이 좌표들은 "parameter로 받아오는 3으로 나누어진 N값"이 조건을 성립하지 않아 N = 1이 될 때까지 계속 재귀함수를 호출하며, 결국 조건을 성립해 공백을 찍으면 된다. - 이외의 좌표들은 "parameter로 받아오는 3으로 나누어진 N값"이 0이 될 때까지 조건문을 성립하지 못해 결국에는 별을 찍는다.
배열을 선언해 규칙대로 공백과 별을 입력한 후 출력할 수도 있지만, 규칙성을 명시할 수 있다면 배열을 선언할 필요 없이 바로 출력할 수 있기 때문에 이와 같이 풀이했다.
소스코드
#include <stdio.h>
void mark_star(int i, int j, int N){
if ((i/N)%3 == 1 && (j/N)%3 == 1)
putchar(32);
else
N/3 == 0 ? (void)putchar('*') : mark_star(i, j, N/3);
}
int main(){
int N;
scanf("%d", &N);
for (int i = 0; i < N; i++){
for (int j = 0; j < N; j++)
mark_star(i, j, N);
putchar(10);
}
}
출처
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 2522] 별 찍기 - 12 [C] (0) | 2021.07.23 |
---|---|
[백준 2448] 별 찍기 - 11 [C] (0) | 2021.07.23 |
[백준 2446] 별 찍기 - 9 [C] (0) | 2021.07.22 |
[백준 2445] 별 찍기 - 8 [C] (0) | 2021.07.22 |
[백준 2444] 별 찍기 - 7 [C] (0) | 2021.07.21 |