728x90
https://www.acmicpc.net/problem/2447
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
이번 문제는 이차원 배열과 재귀를 통해 해결할 수 있는 문제이다.
별이 찍히는 패턴을 분석해 보면 5번째가 항상 공백인 것을 알 수 있다.
이를 파악하기 위해 for문을 돌릴 때 checkCount 변수를 선언하여 체크한다.
또한 패턴이 반복되는 길이는 3의 배수이므로 재귀를 돌릴 때 3으로 나눈 값을 변수로 전달한다.
이 변수가 1이 될 때 별을 찍어주고, checkCount가 5가 될 때 공백값을 넣어주면 별이 완성된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static char[][] star;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int number = Integer.parseInt(br.readLine());
star = new char[number][number];
StringBuilder sb = new StringBuilder();
drawStar(0, 0, number);
for (int i = 0; i < number; i++) {
for (int j = 0; j < number; j++) {
sb.append(star[i][j]);
}
sb.append("\n");
}
System.out.println(sb);
br.close();
}
public static void drawStar(int x, int y, int depth) {
if (depth == 1) {
star[x][y] = '*';
return;
}
int size = depth / 3;
int checkCount = 0;
for (int i = x; i < x + depth; i += size) {
for (int j = y; j < y + depth; j += size) {
checkCount++;
if (checkCount == 5) {
drawSpace(i, j, size);
} else {
drawStar(i, j, size);
}
}
}
}
public static void drawSpace(int x, int y, int depth) {
for (int i = x; i < x + depth; i++) {
for (int j = y; j < y + depth; j++) {
star[i][j] = ' ';
}
}
}
}
'백준 > 재귀' 카테고리의 다른 글
BOJ 11729 - 하노이 탑 이동 순서 (0) | 2022.11.02 |
---|---|
BOJ 24060 - 알고리즘 수업 - 병합 정렬 1 (0) | 2022.11.01 |
BOJ 25501 - 재귀의 귀재 (0) | 2022.11.01 |
BOJ 10870 - 피보나치 수5 (0) | 2022.11.01 |
BOJ 10872 - 팩토리얼 (0) | 2022.11.01 |