BOJ 2447:星図10-C++


星をたたく



コード#コード#

#include <iostream>
#include <vector>
using namespace std;
char board[2200][2200];
void pattern(int y, int x, int size){
    if(size == 0) return;
    for(int i=y+size/3;i<y+size/3+size/3;i++)
    {
        for(int j=x+size/3;j<x+size/3+size/3;j++)
        {
            board[i][j] = ' ';
        }
    }
    int one = size/3;
    int two = size/3 + size/3;

    /* 가운데 부분을 제외한 8부분에 대해 재귀 실행 */
    pattern(y, x, size/3);
    pattern(y+one, x, size/3);
    pattern(y+two, x, size/3);
    pattern(y, x+one, size/3);
    pattern(y, x+two, size/3);
    pattern(y+one, x+two, size/3);
    pattern(y+two, x+one, size/3);
    pattern(y+two, x+two, size/3);
    return;
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    int N;
    cin >> N;
    for(int i=0;i<N;i++)
        fill(board[i], board[i]+N, '*');
    pattern(0, 0, N);
    for(int i=0;i<N;i++)
        cout << board[i]<<'\n';
    return 0;
}
  • 原理
    1)スケジュール領域の中間部分を「」値に保存する
    (yとxの範囲はy+size/3 ~ y+size/3+size/3 x+size/3 ~ x+size/3+size/3の場合は常に「」の値
    2)中間部を除く、나머지 8부분に対して再帰
  • を実行する.
  • 他のゴムは?
    :「」の値を持つ座標のフィーチャーを検索して解決します.
    (y/size%3 == 1 && x/size%3 == 1で空白!)