1447번 별 찍기 - 10

뻔한·2020년 4월 14일
0

Divide & Conquer

목록 보기
9/10

문제 링크

별 찍기 - 10

문제 풀이

처음 사각형의 모든 칸을 * 로 채운 뒤에, 사각형을 9개로 분할하여 중간 사각형만 빈 칸으로 채운다. 이를 사각형의 크기가 3일때까지 재귀 호출한다.

구현

#include <iostream>
#include <vector>
using namespace std;

int N;
vector<vector<char>> board(2200, vector<char>(2200, '*'));

void solve(int y, int x, int size) {
    if (size == 3) {		
        board[y + 1][x + 1] = ' ';
        return;
    }
    int subSize = size / 3;
    for (int i = 0; i < 3; ++i) 
        for (int j = 0; j < 3; ++j) 
            if (i != 1 || j != 1) 
                solve(y + subSize * i, x + subSize * j, subSize);
        
    for (int i = 0; i < subSize; ++i) 
        for (int j = 0; j < subSize; ++j) 
            board[y + subSize + i][x + subSize +  j] = ' ';
}

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

    cin >> N;
    solve(0, 0, N);
    
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) 
            cout << board[i][j];
        cout << "\n";
    }
    return 0;
}
profile
ㄷㄷㄷㅈ

0개의 댓글