사용 언어: Java
- 구상
줄마다 별의 규칙 찾기
→ 줄마다 공백의 수와 별과 별사이의 공백이 다르므로 다른 규칙 이용
배열을 생성하여 별의 구성을 저장한 후, 재귀호출 이용하기
→ 중복되는 별 모양을 이용
- 구현
import java.util.*;
import java.io.*;
public class Main {
public static String[] star;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//줄 갯수 입력받기
int num = Integer.parseInt(br.readLine());
//별 모양을 저장할 배열
star = new String[num];
//반복되는 별을 배열에 저장
star[0] = " * ";
star[1] = " * * ";
star[2] = "*****";
for (int i = 1; 3 * (int)Math.pow(2, i) <= num; i++)
make(i, star);
for (int i = 0; i < num; i++)
System.out.println(star[i]);
}
//별 형태를 재귀형식으로 출력
public static void make(int i, String[] star) {
//줄 갯수
int bottom = 3 * (int)Math.pow(2, i);
// 재귀를 통해 출력해야 하는 부분
int middle = bottom / 2;
//재귀(저장된 형태를 한줄씩 공백 하나를 포함하여 출력)
for (int j = middle; j < bottom; j++) {
star[j] = star[j-middle] + " " + star[j-middle];
}
//재귀 출력 이전 부분의 공백을 채워주기
String space = "";
//재귀 출력한 줄 수만큼 좌우에 공백 채워주기
for (int j = 0; j < middle; j++)
space += " ";
for (int j = 0; j < middle; j++)
star[j] = space + star[j] + space;
}
}
- 반복되는 별 모양을 미리 배열에 저장하고 재귀호출.
- 재귀호출 해야하는 부분을 찾고 (전 부분) + 공백 1개 + (전 부분)으로 배열에 저장
- 재귀호출 전 부분은 좌우 공백을 재귀호출 줄 수만큼 채워주기.