예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)
첫째 줄부터 N번째 줄까지 별을 출력한다.
이건 아주 불친절한 문제라고 생각했다 참내,,,, 그래도,, 이런 퀴즈같은 문제는 재밌으니까 계속 보게되긴 했다
가운데가 빈 삼각형이 기본형이고 저 기본형이 될때까지 쪼개야겠다 라고 생각했다
배열 크기는 N 입력받으면 char[N][2*N-1]
삼각형의 꼭대기는 (0, N-1) 이고
사이즈가 3이 될때 까지 3개로 쪼개서 재귀 돌리자 ! 라고 생각함
import java.util.Arrays;
import java.util.Scanner;
// 별 찍기 - 11
public class Main {
static char[][] stars;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
stars = new char[N][N * 2 - 1]; // 꼭대기 별이 (0,N-1)에 찍힘
for (int i = 0; i < N; i++) {
Arrays.fill(stars[i], ' '); // 공백으로 채움
}
star(0, N-1, N);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
for (int j = 0; j < 2 * N - 1; j++) {
sb.append(stars[i][j]);
}
sb.append('\n');
}
System.out.println(sb);
}
public static void star(int r, int c, int N) {
if (N == 3) { // k=0인 가장 작은 삼각형일 때 별찍기
stars[r][c] = '*';
stars[r + 1][c - 1] = stars[r + 1][c + 1] = '*';
stars[r + 2][c - 2] = stars[r + 2][c - 1] = stars[r + 2][c] = stars[r + 2][c + 1] = stars[r + 2][c + 2] = '*';
return;
} else { // 큰 삼각형 세개로 다시 쪼갬
int cut = N / 2;
star(r, c, cut); // 제일 위에 삼각형
star(r + cut, c - cut, cut); // 아래 왼쪽 삼각형
star(r + cut, c + cut, cut); // 아래 오른쪽 삼각형
}
}
}