
-Code
import java.io.*;
import java.util.*;
public class BOJ2447 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
// 도화지 초기화
char[][]drawingPaper = new char[n][n];
for (char[] line : drawingPaper) {
Arrays.fill(line, '*');
}
// 별그리기
drawingStar(drawingPaper, 0, 0, n);
// 출력
StringBuilder answer = new StringBuilder();
for (char[] line : drawingPaper) {
for (char el : line) {
answer.append(el);
}
answer.append("\n");
}
System.out.println(answer);
}
// 별그리기
private static void drawingStar(
char[][] paper,
int row,
int col,
int size
) {
if (size == 1) return;
// 3으로 나눠서 변의 길이 셋팅
int newSize = size / 3;
// 중앙을 파내기 위해 3 * 3으로 나눠서 계산
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
int newRow = row + i * newSize;
int newCol = col + j * newSize;
if (i == 1 && j == 1) {
// 중앙인 경우 파내기
fillBlank(paper, newRow, newCol, newSize);
} else {
// 중앙이 아닌 경우 해당 부분 하위 파트 별그리기
drawingStar(paper, newRow, newCol, newSize);
}
}
}
}
// 빈칸 파내기
private static void fillBlank(char[][] paper, int row, int col, int size) {
for (int i = row; i < row + size; i++) {
for (int j = col; j < col + size; j++) {
paper[i][j] = ' ';
}
}
}
}
처음에는 감도 안 잡혀서 힌트를 얻으려고 막 찾아보았습니다. 찾아본 결과 배열의 모든 부분에 빈칸으로 채우고 별을 찍는 방법과 별로 채우고 빈칸을 파내는 방법이 있는 것을 알게 되었습니다. 실수로 별을 찍는 로직을 봐버려서 다음날인 오늘 파내는 로직으로 혼자서 구현해 봤습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 15651번 N과 M (3) (0) | 2025.12.28 |
|---|---|
| [백준/Java] 4779번 N과 M (2) (0) | 2025.12.28 |
| [백준/Java] 2346번 풍선 터뜨리기 (0) | 2025.12.28 |
| [백준/Java] 4779번 칸토어 집합 (0) | 2025.12.28 |
| [백준/Java] 34998번 1, 2, 3, 많다! (0) | 2025.12.28 |