백준 2447

혼자서는 못풀겠어서 검색해보고 아이디어 확인 후 직접 따져가면서 구현함
로직은 일찍이 완성했으나 2차원 배열 문제로 오랜시간 소모함

기존의 코드는 아래와 같음.

int N; cin << N;
arr[N][N] = {'*',};	// 또는 만든 후 fill 함수로 채움

문제는 매개변수로 전달도 안되고, 도중에 char* pArr을 이용해서 컴파일 오류 없이 넘어갔는데 결과는 공백만 나옴.

오랜 삽질 끝의 아래의 코드로 이차원 배열 정의 부분을 바꿔주니 바로 해결됨.

cin >> N;
   
char** arr = new char*[N];

for(int i=0; i<N; i++) {
    arr[i] = new char[N];
}

fill(&arr[0][0], &arr[N-1][N], '*');

이유는 모르겠으나 이 부분에 대해 공부할 필요성을 느낌

전체 코드

#include <iostream>

using namespace std;

int N;

int star(char** arr, int n){
    if(n==1)
        return 0;
    
    star(arr, n/3);
    
    for(int i=0; i<N; i++) {
        for(int j=0; j<N; j++) {
            
            if( (i / (n / 3)) % 3 == 1 && (j / (n / 3)) % 3 ==1) {
                arr[i][j] = ' ';
            }
        }
    }
    return 0;
}

int main(void){
    cin >> N;
    
    char** arr = new char*[N];
    for(int i=0; i<N; i++) {
        arr[i] = new char[N];
    }
    
    fill(&arr[0][0], &arr[N-1][N], '*');
    
    star(arr, N);
    
    for(int i=0; i<N; i++) {
        for(int j=0; j<N; j++) {
            cout << arr[i][j];
        }
        cout << '\n';
    }
    
    return 0;
}

좋은 웹페이지 즐겨찾기