[boj] (s1) 2447 별 찍기 - 10

1524 단어 bojboj

문제 링크

재귀적인 패턴을 재귀함수로 찍는 문제

먼저, 좌표(i, j)에 따른 규칙을 알아보자

N=9 일때

빈칸 :
(1,1) (1,4) (1,7) -> i%3==1 && j%3==1

(3,3) (3,4) (3,5) -> /3 -> 모두 (1,1) -> i%3==1 && j%3==1
(4,3) (4,4) (4,5) -> /3 -> 모두 (1,1) -> i%3==1 && j%3==1
(5,3) (5,4) (5,5) -> /3 -> 모두 (1,1) -> i%3==1 && j%3==1

(7,1) (7,4) (7,7) -> i%3==1 && j%3==1

#include <iostream>

using namespace std;

void print(int i, int j, int n)
{
    if ((i / n) % 3 == 1 && (j / n) % 3 == 1) // 빈칸 조건
    {
        cout << " ";
    }
    else // 빈칸 조건 아닐 때
    {
        if (n == 1)
        {
            cout << "*";
        }
        else
        {
            print(i, j, n / 3);
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int N;
    cin >> N;

    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            print(i, j, N);
        }
        cout << '\n';
    }

    return 0;
}

참고로
N/3의 패턴으로 둘러쌓이게 하기 위해 n==1 일때만 *을 찍어줘야한다.

좋은 웹페이지 즐겨찾기