수학과의 좌충우돌 프로그래밍

[C++] BAEKJOON 2447 별찍기 - 10 본문

알고리즘/C++

[C++] BAEKJOON 2447 별찍기 - 10

ssung.k 2019. 9. 19. 15:44

https://www.acmicpc.net/problem/2447

 

2447번: 별 찍기 - 10

첫째 줄에 N이 주어진다. N은 항상 3의 제곱꼴인 수이다. (3, 9, 27, ...) (N=3k, 1 ≤ k < 8)

www.acmicpc.net

분할정복 을 사용하여 문제를 해결하였습니다.

예제 출력을 확인하면 프렉탈의 형태로서 주어진 크기에 대해서 9개의 부분문제로 나누어 접근하였습니다. 이 때 가운데에 해당하는 i==1 && j==1 인 경우에는 continue 를 걸어줘서 건너뜀으로서 가운데를 비워주었습니다. 또한 배열을 처음에 " ", 공백으로 넣어줌으로서 초기화하였습니다.

#include <iostream>

using namespace std;

char board[2188][2188];

void solve(int y,int x,int N){
    
    if (N==1){
        board[y][x] = '*';
        return;
    }
    
    
    int M = N/3;
    for (int i=0;i<3;i++){
        for (int j=0;j<3;j++){
            if (i==1 && j==1) continue;
            solve(y+i*M,x+j*M,M);
        }
    }
}

int main(int argc, const char * argv[]) {
    
    int N;
    cin >> N;
    
    for (int i=0;i<N;i++){
        for (int j=0;j<N;j++){
            board[i][j] = ' ';
        }
    }
    
    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;
}

 

'알고리즘 > C++' 카테고리의 다른 글

[C++] BAEKJOON 1654 랜선 자르기  (0) 2019.09.21
[C++] BAEKJOON 1074 Z  (0) 2019.09.20
[C++] BAEKJOON 1992 퀴드트리  (0) 2019.09.19
[C++] BAEKJOON 2263 트리의 순회  (0) 2019.09.18
[C++] BAEKJOON 1780 종이의 개수  (0) 2019.09.18
Comments