[백준 2447] 별 찍기 - 10

alsry._.112·2023년 10월 28일
0

백준

목록 보기
97/102

🔗문제 풀러가기
단계별로 풀어보기 단계 21의 6번째 문제이다.


문제 분석


위 사진들은 3과 9를 입력하여 나온 실행 결과이다.
입력이 3,9,27...으로 갈 수록
이전 3의 제곱으로 정사각형이 이루어 진다는 것을 알 수 있다.


이를 이용해 큰 정사각형 패턴을 작은 정사각형 패턴으로 나누는 것을 재귀 함수를 이용해 구현하였다.

재귀함수에 대해 정리한 글

코드

#include <iostream>
using namespace std;

void DrawStar(int x, int y, int num)
{
    if (x % 3 == 1 && y % 3 == 1)
    {
        cout << " ";
        return;
    }
    else
    {
        if (num / 3 == 0)
        {
            cout << "*";
            return;
        }

        DrawStar(x / 3, y / 3, num / 3);
    }
}


int main()
{
    int n;
    cin >> n;

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            DrawStar(i, j, n);
        }
        cout << "\n";
    }
}

해석

  1. 수를 입력받아 이중 for문을 통해 * 또는 공백을 그릴 위치를매개변수로 넘겨 DrawStar를 실행한다.
  2. DrawStar 에서 만약 매개변수로 들어온 x와 y를 3으로 나눈 나머지가 1이라면 공백을 출력하고 재귀를 종료한다.
  3. 나머지가 1이 아니고, num이 3으로 나누어 떨어진다면(ex: 1, 3, 6...) 별을 출력한다.
  4. 지금까지 어떠한 조건도 만족되지 않았다면 현재의 x,y,num을 모두 3으로 나누어 작은 패턴으로 만든 뒤 DrawStar를 실행한다.
profile
소통해요

0개의 댓글