PS/Baekjoon Online Judge

[백준 2447] 별 찍기 - 10 [C]

kimyoungrok 2021. 7. 23. 00:50

백준 - 2447


풀이

좌표를 이용해 문제를 해결하기로 했다.

  • 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);
    }
}

출처

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

 

'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