본문 바로가기

알고리즘

[백준] 2448 - 별 찍기 - 11

별 찍기 - 11

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (k ≤ 10)

출력

첫째 줄부터 N번째 줄까지 별을 출력한다.

 

재귀적으로 풀어내면 편리하고, 구현이 간단해 진다.

 

#include<iostream>
using namespace std;
void fill(char ** board, int Y, int X, int degree){
	if(degree == 3){
		board[Y][X] = '*';
		board[Y+1][X-1] = '*';
		board[Y+1][X+1] = '*';
		board[Y+2][X-2] = '*';
		board[Y+2][X-1] = '*';
		board[Y+2][X] = '*';
		board[Y+2][X+1] = '*';
		board[Y+2][X+2] = '*';
		return;	
	}
	fill(board, Y, X, degree/2);
	fill(board, Y + degree/2, X - degree/2, degree/2);
	fill(board, Y + degree/2, X + degree/2, degree/2);
}
int main(){
	int N;
	scanf("%d", &N);
	
	char ** board = new char*[N];
	for(int i=0; i<N; i++){
		board[i] = new char[N * 2];
	}
	
	for(int i=0; i<N; i++){
		for(int j=0; j<N*2; j++){
			board[i][j] = ' ';
		}
	}
	
	fill(board, 0, N-1, N);
	
	for(int i=0; i<N; i++){
		for(int j=0; j<N*2; j++){
			printf("%c", board[i][j]);
		}
		printf("\n");
	}
	
	for(int i=0; i<N; i++){
		delete[] board[i];
	}
	delete[] board;
	return 0;
}

 

'알고리즘' 카테고리의 다른 글

[백준] 11049 - 행렬 곱셈 순서  (0) 2019.10.06
[백준] 15681 - 트리와 쿼리  (0) 2019.10.04
[백준] 1002 - 터렛  (0) 2019.10.03
[백준] 1005 - ACM Craft  (0) 2019.10.03
[백준]1011 - Fly me to the Alpha Centauri  (0) 2019.01.15